我正在尝试使用缓冲区溢出执行具有ROP攻击的功能。
我的代码:
1 #include <stdio.h>
2 #include <string.h>
3
4 void jumphere(){
5 printf("SUCCESS!!");
6 }
7
8 int main(int argc, char** argv){
9 char buffer [8];
10 strcpy(buffer, argv[1]);
11
12 printf("%s\n", buffer);
13
14 return 0;
15 }
目标是执行提供特定输入的jumphere
函数。
在主函数的末尾,当执行ret指令时,我弄清楚了$ eip指向什么,然后用jumphere
函数的地址改写了该地址。
我成功跳转到jumphere
函数,但是没有显示“ SUCCESS”。
为了找到原因,我制作了另一个简单的代码来打印字符串。
简单代码:
1 #include <stdio.h>
2 #include <string.h>
3
4 void printing(){
5 printf("SUCCESS");
6 }
7
8 int main(int argc, char** argv){
9 printing();
10 }
两个代码之间的区别是:
在 SimpleCode 中,指令流在printing
之后转到call <printing>
函数,并在main
结束时返回到printing
函数。执行ret
中的main
时将打印该字符串。
但是在 MyCode 中,它在jumphere
函数结束后转到main
,并且不会返回到main
。
我该如何解决这个问题?