2015-07-27 3 views
0

Я работаю над назначением, и у меня возникла проблема. Я довольно новичок во всем секторе безопасности программирования, поэтому я могу просто пропустить что-то простое, но я был бы признателен за любую помощь, которую вы, ребята, можете дать.Использование 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.

Благодарим вас за помощь!

+0

Различные компиляторы и различные параметры компилятора будут генерировать другой код. Вам нужно будет изучить и использовать то, что ваш компилятор выплевывает или дублирует среду сборки учебника. – user4581301

+0

Вы компилируете в режиме отладки? –

+1

Не об этом я знаю, Джеймс. Спасибо пользователю4581301, я буду стараться! – huSh

ответ

0

Я ожидал, что информация читать как этот

Вы ожидаете найти Intel x86_64 инструкции ...

Но вместо этого я получаю это:

Вы находят инструкции Sun SPARC. Вы знаете, что существуют процессоры, отличные от Intel x86, верно?

Если вы хотите отлаживать/манипулировать сборкой Intel, вам придется делать это на машине с процессором Intel.

+0

Я знал о существовании других процессоров, но я не знал, что процессор повлиял на эту информацию. При этом у меня есть процессор Intel. – huSh

Смежные вопросы