我正在尝试重写此程序的返回地址,因此当程序询问时,我输入:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBXXXX,其中“ XXXX”是我需要放置的地址。但是,当我用“ \ xef \ x11 \ x40 \ x00”替换“ XXXX”时,
我尝试使用命令
printf "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBB\xef\x11\x40\x00" | ./buffer
但是我看到有些符号是不可打印的并且不能正确发送。
我不认为这是因为在我的终端中启用了Unicode,因为当我输入printf "\x41"
时它将返回“ A”。
我也尝试在GDB中做同样的事情,但是我只看到programm带有一个奇怪的地址(0x3961785c)。
这是一个代码:
#include <stdio.h>
void return_input()
{
char array[30];
gets(array);
printf("%s\n", array);
}
int main()
{
return_input();
return 0;
}
破坏主线:
0x004011df <+0>: push %ebp
0x004011e0 <+1>: mov %esp,%ebp
0x004011e2 <+3>: and $0xfffffff0,%esp
0x004011e5 <+6>: call 0x4011fb <__x86.get_pc_thunk.ax>
0x004011ea <+11>: add $0x2e16,%eax
0x004011ef <+16>: call 0x4011a9 <return_input>
0x004011f4 <+21>: mov $0x0,%eax
0x004011f9 <+26>: leave
0x004011fa <+27>: ret
烦恼return_input
0x004011a9 <+0>: push %ebp
0x004011aa <+1>: mov %esp,%ebp
0x004011ac <+3>: push %ebx
0x004011ad <+4>: sub $0x24,%esp
0x004011b0 <+7>: call 0x4010b0 <__x86.get_pc_thunk.bx>
0x004011b5 <+12>: add $0x2e4b,%ebx
0x004011bb <+18>: sub $0xc,%esp
0x004011be <+21>: lea -0x26(%ebp),%eax
0x004011c1 <+24>: push %eax
0x004011c2 <+25>: call 0x401030 <gets@plt>
0x004011c7 <+30>: add $0x10,%esp
0x004011ca <+33>: sub $0xc,%esp
0x004011cd <+36>: lea -0x26(%ebp),%eax
0x004011d0 <+39>: push %eax
0x004011d1 <+40>: call 0x401040 <puts@plt>
0x004011d6 <+45>: add $0x10,%esp
0x004011d9 <+48>: nop
0x004011da <+49>: mov -0x4(%ebp),%ebx
0x004011dd <+52>: leave
0x004011de <+53>: ret