Я работаю над назначением, и у меня возникла проблема. Я довольно новичок во всем секторе безопасности программирования, поэтому я могу просто пропустить что-то простое, но я был бы признателен за любую помощь, которую вы, ребята, можете дать.Использование gdb для использования буфера-переполнения
В этом назначении (старое назначение, не относится к этому термину для моего класса) мы должны получить программу для вызова функции, отличной от того, что она предназначена для вызова. Код размещен ниже:
#include <stdio.h>
#include <stdlib.h>
int oopsIGotToTheBadFunction(void)
{
printf("Gotcha!\n");
exit(0);
}
int goodFunctionUserInput(void)
{
char buf[12];
gets(buf);
return(1);
}
int main(void)
{
goodFunctionUserInput();
printf("Overflow failed\n");
return(1);
}
Мы предназначены, чтобы получить oopsIGotToTheBadFunction
выполнить, когда другая функция вызывается. Пока я загружаю программу в Terminal или PuTTy, а затем выполняю команду disas
, но полученная информация не то, что я ожидал. Я ожидал, что информация читать как этот
Dump of assembler code for function bar:
0x000000000040068e <+0>: push %rbp
0x000000000040068f <+1>: mov %rsp,%rbp
0x0000000000400692 <+4>: mov $0x400800,%edi
0x0000000000400697 <+9>: callq 0x400528 <[email protected]>
0x000000000040069c <+14>: mov 0x20099d(%rip),%rax # 0x601040 ...
0x00000000004006a3 <+21>: mov %rax,%rdi
0x00000000004006a6 <+24>: callq 0x400558 <[email protected]>
0x00000000004006ab <+29>: leaveq
0x00000000004006ac <+30>: retq
End of assembler dump.
Но вместо этого я получаю это:
enter(gdb) disas oopsIGotToTheBadFunction
Dump of assembler code for function oopsIGotToTheBadFunction:
0x00000001000008fc <oopsIGotToTheBadFunction+0>: save %sp, -192, %sp
0x0000000100000900 <oopsIGotToTheBadFunction+4>: sethi %hi(0x100000), %g 1
0x0000000100000904 <oopsIGotToTheBadFunction+8>: mov %g1, %g1 ! 0x1000 00
0x0000000100000908 <oopsIGotToTheBadFunction+12>: sllx %g1, 0xc, %g1
0x000000010000090c <oopsIGotToTheBadFunction+16>: or %g1, 0xa20, %o0
0x0000000100000910 <oopsIGotToTheBadFunction+20>: call 0x100100c20 <[email protected] plt>
0x0000000100000914 <oopsIGotToTheBadFunction+24>: nop
0x0000000100000918 <oopsIGotToTheBadFunction+28>: clr %o0 ! 0x0
0x000000010000091c <oopsIGotToTheBadFunction+32>: call 0x100100ba0 <[email protected] plt>
0x0000000100000920 <oopsIGotToTheBadFunction+36>: nop
0x0000000100000924 <oopsIGotToTheBadFunction+40>: nop
End of assembler dump.
Прогулка через Я использую требует от меня, чтобы управлять информацией в КПБ и leaveq пятна, но я я не уверен, что использовать вместо тех, поскольку они отсутствуют, когда я запускаю команду disas.
Благодарим вас за помощь!
Различные компиляторы и различные параметры компилятора будут генерировать другой код. Вам нужно будет изучить и использовать то, что ваш компилятор выплевывает или дублирует среду сборки учебника. – user4581301
Вы компилируете в режиме отладки? –
Не об этом я знаю, Джеймс. Спасибо пользователю4581301, я буду стараться! – huSh