Вопрос по gdb – Остановка на первой инструкции машинного кода в GDB

47

После загрузки исполняемого файла в gdb, как мне разбить точку входа перед выполнением первой инструкции?

Исполняемый файл, который я анализирую, представляет собой вредоносную программу, зашифрованную таким образом.break main абсолютно ничего не делает

связанные с:reverseengineering.stackexchange.com/questions/8724/… Ciro Santilli 新疆改造中心 六四事件 法轮功
Заlldb, увидеть:How to stop debugger right after the execution? kenorb

Ваш Ответ

5   ответов
3

how do I break at the entry point, before the first instruction is executed?

Вы можете найти, какие функции вызывались раньшеint main() сset backtrace past-main on и после их поиска установите для них точку останова и перезапустите вашу программу:

>gdb  -q  main
Reading symbols from /home/main...done.
(gdb) set backtrace past-main on
(gdb) b main
Breakpoint 1 at 0x40058a: file main.cpp, line 25.
(gdb) r
Starting program: /home/main

Breakpoint 1, main () at main.cpp:25
25        a();
(gdb) bt
#0  main () at main.cpp:25
#1  0x0000003a1d81ed1d in __libc_start_main () from /lib64/libc.so.6
#2  0x0000000000400499 in _start ()
(gdb) b _start
Breakpoint 2 at 0x400470
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/main

Breakpoint 2, 0x0000000000400470 in _start ()
53

info files Команда может дать вам адрес, который вы можете указать:

    ...
    Entry point: 0x80000000
    ...
(gdb) break *0x80000000
(gdb) run
Error: User Rate Limit Exceededfasm /dev/stdin test <<< $'format ELF executable\nint3'.
Error: User Rate Limit Exceededthis answerError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededgdbError: User Rate Limit Exceeded0x10e0Error: User Rate Limit Exceededi filesError: User Rate Limit Exceeded0x5555555550e0Error: User Rate Limit Exceeded
15

starti, Пример сеанса GDB:

$ gdb /bin/true
Reading symbols from /bin/true...(no debugging symbols found)...done.
(gdb) starti
Starting program: /bin/true 

Program stopped.
0xf7fdd800 in _start () from /lib/ld-linux.so.2
(gdb) x/5i $pc
=> 0xf7fdd800 <_start>: mov    eax,esp
   0xf7fdd802 <_start+2>:       call   0xf7fe2160 <_dl_start>
   0xf7fdd807 <_dl_start_user>: mov    edi,eax
   0xf7fdd809 <_dl_start_user+2>:       call   0xf7fdd7f0
   0xf7fdd80e <_dl_start_user+7>:       add    ebx,0x1f7e6
Error: User Rate Limit Exceeded
5

b _start или & quot;b start может или не может работать. Если нет, найдите адрес точки входа с помощью readelf / objdump и используйте & quot;b *0x<hex address>& Quot ;.

Error: User Rate Limit Exceeded rickythefox
_initError: User Rate Limit Exceededcru/init-first.cError: User Rate Limit Exceeded_startError: User Rate Limit Exceededb _init; runError: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/31379422/…
12

очки останова:

$ gdb /bin/true
Reading symbols from /bin/true...(no debugging symbols found)...done.
(gdb) b *0
Breakpoint 1 at 0x0
(gdb) r
Starting program: /bin/true 
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x0

(gdb) disas
Dump of assembler code for function _start:
=> 0xf7fdd800 <+0>:     mov    eax,esp
   0xf7fdd802 <+2>:     call   0xf7fe2160 <_dl_start>
End of assembler dump.

Идея взята изэтот ответ на RE.SE.

Error: User Rate Limit ExceededstepiError: User Rate Limit Exceededdelete breakpointsError: User Rate Limit Exceeded
Error: User Rate Limit Exceededd 1Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы