主要思路是,对可执行文件进行反汇编,找出地址,然后在vim下通过16进制形式进行修改,仅作为一个练习咯。
第一步,写一个简单的代码jmp.c:
#include <stdio.h>
void jmp(void)
{
printf("This is in funtion jmp.\n");
}
int main()
{
printf("This is main and you can not call function jump.\n");
return 0;
}
$gcc jmp.c -o jmp编译生成jmp可执行文件。
./jmp可以得到结果:
This is main and you can not call function jump.
obj -S jmp可以反汇编执行。这里S是大写。结果中,这里需要注意的只有jmp中和main中的函数,如下:
000000000040052d <jmp>:
40052d: 55 push %rbp
40052e: 48 89 e5 mov %rsp,%rbp
400531: bf e8 05 40 00 mov $0x4005e8,%edi
400536: e8 d5 fe ff ff callq 400410 <puts@plt>
40053