Защита от хакеров корпоративных сетей - страница 107

Шрифт
Интервал


.

Для сравнения была написана небольшая программа на языке C (классическая небольшая программа, выводящая строку «Hello World»). Для отладки использовался отладчик GNU (GDB). Код программы представлен ниже:


>#include

>int main ()

>{

>printf (“Hello World\n”);

>return (0);

>}


Программа была скомпилирована с включением отладочной информации (был включен переключатель —g):


>[elliptic@]$ gcc -g hello.c -o hello

>[elliptic@ellipse]$ ./hello

>Hello World


Пример протокола отладки под управлением GDB показан ниже:


>[elliptic@ellipse]$ gdb hello

>GNU gdb 19991004

>Copyright 1998 Free Software Foundation, Inc.

>GDB is free software, covered by the GNU General Public

>License, and you are welcome to change it and/or

>distribute copies of it under certain conditions.

>Type “show copying” to see the conditions.

>There is absolutely no warranty for GDB. Type “show

>warranty” for details.

>This GDB was configured as “i386-redhat-linux”...

>(gdb) break main


Была установлена точка прерывания при входе в функцию main. При ее достижении выполнение программы было приостановлено для выполнения программистом действий по отладке программы. Контрольная точка была установлена до выдачи команды run.


>Breakpoint 1 at 0x80483d3: file hello.c, line 5.

>(gdb) run


Команда run начинает выполнение программы под управлением отладчика.


>Starting program: /home/ryan/hello

>Breakpoint 1, main () at hello.c:5

>5 printf (“Hello World\n”);

>(gdb) disassemble


После того достижения программой точки прерывания и начала сессии отладки была выдана команда disassemble, позволяющая вывести дополнительную отладочную информацию о программе.


>Dump of assembler code for function main:

>0x80483d0

: push %ebp

>0x80483d1 : mov %esp,%ebp

>0x80483d3 : push $0x8048440

>0x80483d8 : call 0x8048308

>0x80483dd : add $0x4,%esp

>0x80483e0 : xor %eax,%eax

>0x80483e2 : jmp 0x80483e4

>0x80483e4 : leave

>0x80483e5 : ret

>End of assembler dump.


Протокол отображает ассемблерный код программы «hello world», соответствующий ассемблеру x86 Linux. Исследование собственных программ в отладчике – хороший способ изучения листингов ассемблерного кода.


>(gdb) s

>printf (format=0x8048440 “Hello World\n”) at printf.c:30

>printf.c: No such file or directory.


После задания командой