#include <stdio.h>
void foo(void);
void bar(void);
void print_function_instructions(void *func_ptr, size_t func_len);
int main(void) {
void *foo_addr = (void*)foo;
void *bar_addr = (void*)bar;
print_function_instructions(foo_addr, bar_addr - foo_addr);
return 0;
}
void foo(void) {
int i=0;
i++;
}
void bar(void) {
}
void print_function_instructions(void *func_ptr, size_t func_len) {
unsigned char i=0;
for(i; i<func_len; i++) {
unsigned char *instruction = (unsigned char*)func_ptr+i;
printf("%p (%2u): %x\n", func_ptr
+i
, i
, *instruction
); }
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKdm9pZCBmb28odm9pZCk7CnZvaWQgYmFyKHZvaWQpOwp2b2lkIHByaW50X2Z1bmN0aW9uX2luc3RydWN0aW9ucyh2b2lkICpmdW5jX3B0ciwgc2l6ZV90IGZ1bmNfbGVuKTsKIAppbnQgbWFpbih2b2lkKSB7CiAgICB2b2lkICpmb29fYWRkciA9ICh2b2lkKilmb287CiAgICB2b2lkICpiYXJfYWRkciA9ICh2b2lkKiliYXI7CiAKICAgIHByaW50X2Z1bmN0aW9uX2luc3RydWN0aW9ucyhmb29fYWRkciwgYmFyX2FkZHIgLSBmb29fYWRkcik7CiAKICAgIHJldHVybiAwOwp9CiAKdm9pZCBmb28odm9pZCkgewogICAgaW50IGk9MDsKICAgIGkrKzsKICAgIHByaW50ZigiaTogJWRcbiIsIGkpOwp9CiAKdm9pZCBiYXIodm9pZCkgewoJcHJpbnRmKCJzb21ldGhpbmciKTsKfQogCnZvaWQgcHJpbnRfZnVuY3Rpb25faW5zdHJ1Y3Rpb25zKHZvaWQgKmZ1bmNfcHRyLCBzaXplX3QgZnVuY19sZW4pIHsKCXVuc2lnbmVkIGNoYXIgaT0wOwogICAgZm9yKGk7IGk8ZnVuY19sZW47IGkrKykgewogICAgICAgIHVuc2lnbmVkIGNoYXIgKmluc3RydWN0aW9uID0gKHVuc2lnbmVkIGNoYXIqKWZ1bmNfcHRyK2k7CiAgICAgICAgcHJpbnRmKCIlcCAoJTJ1KTogJXhcbiIsIGZ1bmNfcHRyK2ksIGksICppbnN0cnVjdGlvbik7CiAgICB9Cn0=