gdb позволяет получить ассемблерный код, соответствующий функциям main() и
toto() :
>>gcc -g -o fct fct.c
>>gdb fct
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) disassemble main //main
Dump of assembler code for function main:
0x80483f8 <main>: push %ebp //пролог
0x80483f9 <main+1>: mov %esp,%ebp
0x80483fb <main+3>: sub $0x4,%esp
0x80483fe <main+6>: movl $0x1,0xfffffffc(%ebp)
0x8048405 <main+13>: push $0x2 //вызов
0x8048407 <main+15>: push $0x1
0x8048409 <main+17>: call 0x80483d0 <toto>
0x804840e <main+22>: add $0x8,%esp //возврат из toto()
0x8048411 <main+25>: movl $0x0,0xfffffffc(%ebp)
0x8048418 <main+32>: mov 0xfffffffc(%ebp),%eax
0x804841b <main+35>: push %eax //вызов
0x804841c <main+36>: push $0x8048486
0x8048421 <main+41>: call 0x8048308 <printf>
0x8048426 <main+46>: add $0x8,%esp //возврат из printf()
0x8048429 <main+49>: leave //возврат из main()
0x804842a <main+50>: ret
End of assembler dump.
(gdb) disassemble toto //toto
Dump of assembler code for function toto:
0x80483d0 <toto>: push %ebp //пролог
0x80483d1 <toto+1>: mov %esp,%ebp
0x80483d3 <toto+3>: sub $0xc,%esp
0x80483d6 <toto+6>: mov 0x8048480,%eax
0x80483db <toto+11>: mov %eax,0xfffffff8(%ebp)
0x80483de <toto+14>: mov 0x8048484,%al
0x80483e3 <toto+19>: mov %al,0xfffffffc(%ebp)
0x80483e6 <toto+22>: movl $0x3,0xfffffff4(%ebp)
0x80483ed <toto+29>: movl $0x0,0xc(%ebp)
0x80483f4 <toto+36>: jmp 0x80483f6 <toto+38>
0x80483f6 <toto+38>: leave //возврат из toto()
0x80483f7 <toto+39>: ret
End of assembler dump.
Инструкции, не отмеченные цветом, соответствуют нашим
програмным инструкциям, таким, например, как присваивание.