Я пытаюсь переписать обратный адрес этой программы, поэтому, когда программа запрашивает, я ввожу: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBXBXXX, где «XXXX» - это адрес, который мне нужно разместить. Но когда я заменил «XXXX» на «\ xef \ x11 \ x40 \ x00», это
Я пытался использовать команду
printf "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBB\xef\x11\x40\x00" | ./buffer
Но я вижу, что некоторые символы не печатаются и отправляются неправильно.
Я не думаю, что это из-за включения юникода в моем терминале, потому что, когда я ввожу printf "\x41"
, он возвращает "A".
Я также пытался делать то же самое в GDB, но видел только, что программа падает со странным адресом (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
disass 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