рдбреЗрд╡рд┐рдб рдЕрд▓реНрдмрд░реНрдЯ рджреНрд╡рд╛рд░рд╛ рдЕрдиреВрджрд┐рдд - рд▓рд░реНрдирд┐рдВрдЧ рдЕрд╕реЗрдВрдмрд▓реА рджреНрд╡рд╛рд░рд╛ рдЕрдВрдбрд░рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рд╕реА редрдкрд┐рдЫрд▓реА рдмрд╛рд░, рдПрд▓рди рдУ'рдбреЙрдиреЗрд▓ рдиреЗ
рдЬреАрдбреАрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реА рд╕реАрдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдЖрдЬ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдореВрд░реНрдд рд╕реНрддрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╡реЗ рд╕реАрдЦрдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдмрди рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ C рдХреА рдПрдХ рдареЛрд╕ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╕рдордЭ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ C рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдбрд┐рд╕рд╛рдЗрдб рдХрд░рдХреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╣рдо GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдЬреНрдЮрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ C рдореЗрдВ рд╕реНрдерд┐рд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реИрдВред
рд▓реЗрдЦрдХ рдХрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рднреА рдХреЛрдб рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ 10.8.1 рдХреЗ рддрд╣рдд x86_64 рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдЕрдХреНрд╖рдо (
-0 ) рдХреЗ рд╕рд╛рде рдХреНрд▓реИрдВрдЧ 4.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд╕реЗрдореНрдмрд▓рд░ рд╕реАрдЦрдирд╛
рдЖрдЗрдП GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдбрд┐рд╕реЗрдмрд▓ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрдврд╝рдирд╛ рд╕реАрдЦреЗрдВред рдирд┐рдореНрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд╛рда рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ
simple.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:
int main(void) { int a = 5; int b = a + 6; return 0; }
рдЕрдм рдЗрд╕реЗ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдЕрдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдФрд░ GDB рдЪрд▓рд╛рдПрдВред
$ CFLAGS="-g -O0" make simple cc -g -O0 simple.c -o simple $ gdb simple
рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░
рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,
рдЕрдЧрд▓реЗ рдХрдерди рдХреЗ рдмрд╛рдж рдирдВрдмрд░ 2 рджрд░реНрдЬ рдХрд░реЗрдВ:
(gdb) break main (gdb) run (gdb) next 2
рдЕрдм рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдбрд┐рд╕реНрд╕реИрдореНрдб рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЛ
рдЕрд╕рдВрддреБрд╖реНрдЯ рдХрдорд╛рдВрдб рдореЗрдВ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
(gdb) disassemble Dump of assembler code for function main: 0x0000000100000f50 <main+0>: push %rbp 0x0000000100000f51 <main+1>: mov %rsp,%rbp 0x0000000100000f54 <main+4>: mov $0x0,%eax 0x0000000100000f59 <main+9>: movl $0x0,-0x4(%rbp) 0x0000000100000f60 <main+16>: movl $0x5,-0x8(%rbp) 0x0000000100000f67 <main+23>: mov -0x8(%rbp),%ecx 0x0000000100000f6a <main+26>: add $0x6,%ecx 0x0000000100000f70 <main+32>: mov %ecx,-0xc(%rbp) 0x0000000100000f73 <main+35>: pop %rbp 0x0000000100000f74 <main+36>: retq End of assembler dump.
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ,
рдЕрд╕рдВрддреБрд╖реНрдЯ рдХрдорд╛рдВрдб AT & T рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ GNU рдЕрд╕реЗрдВрдмрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдПрдЯреА рдПрдВрдб рдЯреА рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИ:
рдПрдордиреЛрдореЛрдирд┐рдХ рд╕реНрд░реЛрдд ,
рдЧрдВрддрд╡реНрдп ред рдЬрд╣рд╛рдБ
рдореЗрдиреЗрдорд┐рдХ рдорд╛рдирд╡-рдкрдардиреАрдп рдирд┐рд░реНрджреЗрд╢ рдирд╛рдо рд╣реИрдВред рдФрд░
рд╕реНрд░реЛрдд рдФрд░
рдЧрдВрддрд╡реНрдп рдСрдкрд░реЗрдВрдб рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдореВрд▓реНрдп, рд░рдЬрд┐рд╕реНрдЯрд░, рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдпрд╛ рд▓реЗрдмрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдмрджрд▓реЗ рдореЗрдВ, рддрддреНрдХрд╛рд▓ рдореВрд▓реНрдп рд╕реНрдерд┐рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕
$ рдЙрдкрд╕рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
$ 0x5 рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ 5 рдирдВрдмрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
% рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╛рдо рдЙрдкрд╕рд░реНрдЧ рд╣реИрдВред
рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ
рдпрд╣ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд░рдЬрд┐рд╕реНрдЯрд░ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВред рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ
рдХрд╛ рдЖрдХрд╛рд░ рдпрд╛
рдЪреМрдбрд╝рд╛рдИ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 64-рдмрд┐рдЯ рд╕реАрдкреАрдпреВ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдЪреМрдбрд╝рд╛рдИ 64 рдмрд┐рдЯреНрд╕ рд╣реЛрдЧреАред рдпрд╣реА рдмрд╛рдд 32-рдмрд┐рдЯ рдФрд░ 16-рдмрд┐рдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрджрд┐ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ рдФрд░ рдпрд╣ рдареАрдХ рдЗрд╕реА рд╡рдЬрд╣ рд╕реЗ рд╣реИ рдХрд┐ рдЕрдВрдХрдЧрдгрд┐рдд рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдЕрдХреНрд╕рд░ рдЙрдирдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ x86 рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖ рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдорд╣рддреНрд╡ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдкреНрд░реЛрд╕реЗрд╕рд░ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
% eax рдФрд░
% ecx рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВ, рдЬрдмрдХрд┐
% rbp рдФрд░
% rsp рд╡рд┐рд╢реЗрд╖ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВред
% Rbp рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдзрд╛рд░ рд╕реВрдЪрдХ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рдЖрдзрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░
% rsp рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
% Rbp рд░рдЬрд┐рд╕реНрдЯрд░ рд╣рдореЗрд╢рд╛
% rsp рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреИрдХ рд╣рдореЗрд╢рд╛ рдЙрдЪреНрдЪ рдореЗрдореЛрд░реА рдкрддреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдирд┐рдЪрд▓реЗ рдкрддреЗ рдХреА рдУрд░ рдмрдврд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк "рдХреЙрд▓ рд╕реНрдЯреИрдХ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА
рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
X86 рдкрд░рд┐рд╡рд╛рд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ 8086 16-рдмрд┐рдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИрдВред x86 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ 16-рдмрд┐рдЯ рд╕реЗ 32-рдмрд┐рдЯ рдФрд░ рдЕрдВрдд рдореЗрдВ 64-рдмрд┐рдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдирдП рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП, рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд░рдЬрд┐рд╕реНрдЯрд░ AX рд▓реЗрдВ, рдЬреЛ 16 рдмрд┐рдЯреНрд╕ рдЪреМрдбрд╝рд╛ рд╣реИред рдПрдПрдЪ рдирд╛рдо рд╕реЗ рдЗрд╕рдХреА рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рдФрд░ рдирд┐рдореНрди рдмрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП - рдПрдПрд▓ рдирд╛рдо рд╕реЗред рдЬрдм 32-рдмрд┐рдЯ 80386 рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рддреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд (рдПрдХреНрд╕рдЯреЗрдВрдбреЗрдб) AX рдпрд╛ EAX 32-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрди рдЧрдпрд╛, рдЬрдмрдХрд┐ AX 16-рдмрд┐рдЯ рдмрдирд╛ рд░рд╣рд╛ рдФрд░ EAX рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдпрд╛ред рдЗрд╕реА рддрд░рд╣, рдЬрдм x86_64 рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рддреЛ "R" рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ EAX 64-рдмрд┐рдЯ рдирдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдЖрдзрд╛ рдмрди рдЧрдпрд╛ред рдЙрдкрд░реЛрдХреНрдд рд░рд┐рд╢реНрддреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЪрд┐рддреНрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
|__64__|__56__|__48__|__40__|__32__|__24__|__16__|__8___| |__________________________RAX__________________________| |xxxxxxxxxxxxxxxxxxxxxxxxxxx|____________EAX____________| |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|_____AX______| |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|__AH__|__AL__|
рдХреЛрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдЕрд╕рдВрддреБрд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
0x0000000100000f50 <main+0>: push %rbp 0x0000000100000f51 <main+1>: mov %rsp,%rbp
рдкрд╣рд▓реЗ рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрд▓реЙрдЧ рдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдкрд░ рдкреБрд░рд╛рдиреЗ рдЖрдзрд╛рд░ рд╕реВрдЪрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдорд╛рди рдХреЛ рдмреЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж,
% rbp рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рдмреЗрд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
0x0000000100000f54 <main+4>: mov $0x0,%eax
рдпрд╣ рдирд┐рд░реНрджреЗрд╢ 0
%% рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред X86 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди
% eax рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдХрдерди рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ 0 рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред
0x0000000100000f59 <main+9>: movl $0x0,-0x4(%rbp)
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ:
-0x4 (% рдЖрд░рдмреАрдкреА) ред рдХреЛрд╖реНрдардХ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдореГрддрд┐ рдкрддрд╛ рд╣реИред рдЗрд╕ рдЦрдВрдб рдореЗрдВ,
% rbp , рддрдерд╛рдХрдерд┐рдд рдЖрдзрд╛рд░ рд░рдЬрд┐рд╕реНрдЯрд░, рдФрд░
-0x4 , рдЬреЛ рдСрдлрд╕реЗрдЯ рд╣реИред рдпрд╣
% rbp + -0x4 рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреИрдХ рдиреАрдЪреЗ рдмрдврд╝рддрд╛ рд╣реИ, рдмреЗрд╕ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рд╕реЗ 4 рдШрдЯрд╛рдирд╛ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ 0
% rbp - 4 рдкрддреЗ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рд░реЗрдЦрд╛ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИ, рдФрд░ рдпрд╣ рдореБрдЭреЗ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓реИрдВрдЧ
рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
рдореЗрдиреЗрдореЛрдирд┐рдХ рдореЗрдВ рдкреНрд░рддреНрдпрдп
рдПрд▓ рд╣реИ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдСрдкрд░реЗрдВрдб
рдПрд▓ рдУрдиреНрдЧ (рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП 32 рдмрд┐рдЯреНрд╕) рдХрд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддреНрдпрдп
b yte ,
s hort ,
w ord ,
q uad рдФрд░
t en рд╣реИрдВ ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдРрд╕рд╛ рдирд┐рд░реНрджреЗрд╢ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдкреНрд░рддреНрдпрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЖрдХрд╛рд░ рд╕реНрд░реЛрдд рд░рдЬрд┐рд╕реНрдЯрд░ рдпрд╛ рдЧрдВрддрд╡реНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ,
% eax 32 рдмрд┐рдЯ рдЪреМрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрджреЗрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
movl рд╣реИ ред
0x0000000100000f60 <main+16>: movl $0x5,-0x8(%rbp)
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдореВрд▓ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЕрд╕реЗрдВрдмрд▓рд░ рд▓рд╛рдЗрди
рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╣рд▓реА рд╕реА рд▓рд╛рдЗрди рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЧрд▓реЗ рдЙрдкрд▓рдмреНрдз рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╕реНрд▓реЙрдЯ (
% rbp - 0x8 ) рдореЗрдВ 5 рдирдВрдмрд░
рд░рдЦрддреА рд╣реИ , рд╣рдорд╛рд░реЗ рдкрд┐рдЫрд▓реЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдиреАрдЪреЗ 4 рдмрд╛рдЗрдЯреНрд╕ред рдпрд╣ рдЪрд░ рдХрд╛ рд╕реНрдерд╛рди
рд╣реИ ред рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(gdb) x &a 0x7fff5fbff768: 0x00000005 (gdb) x $rbp - 8 0x7fff5fbff768: 0x00000005
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдПрдХ рд╣реА рд╣реИред рдЖрдк рдпрд╣ рднреА рдиреЛрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ GDB рд╣рдорд╛рд░реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, GDB рдореЗрдВ рд╕рднреА рдЪрд░ рдХреА рддрд░рд╣, рдЙрдирдХрд╛ рдирд╛рдо
$ рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рдЬрдмрдХрд┐ AT & T рд╕реЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ
% рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
0x0000000100000f67 <main+23>: mov -0x8(%rbp),%ecx 0x0000000100000f6a <main+26>: add $0x6,%ecx 0x0000000100000f70 <main+32>: mov %ecx,-0xc(%rbp)
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЪрд░ рдХреЛ
рдПрдХ % ecx рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗ рдПрдХ, рдЗрд╕рдореЗрдВ 6 рдирдВрдмрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ
% rbp - 0xc рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ ред рдпрд╣
рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╣реИред рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрддрд╛
% rbp - 0xc рдореИрдЪ рд╡реЗрд░рд┐рдПрдмрд▓
b рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдо GDB рдХреЗ рд╕рд╛рде рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
(gdb) x &b 0x7fff5fbff764: 0x0000000b (gdb) x $rbp - 0xc 0x7fff5fbff764: 0x0000000b
рдмрд╛рдХреА
рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдл рдПрдХ рд╕рдлрд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЙрдкрд╕рдВрд╣рд╛рд░ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
0x0000000100000f73 <main+35>: pop %rbp 0x0000000100000f74 <main+36>: retq
рд╣рдо рдкреБрд░рд╛рдиреЗ рдмреЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЛ
рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕
% rbp рдореЗрдВ
рдбрд╛рд▓рддреЗ рд╣реИрдВ , рдФрд░ рдлрд┐рд░
рд░рд┐рдЯреЗрдХ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рд╣рдореЗрдВ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдкрд░ рдлреЗрдВрдХ
рджреЗрдЧрд╛ , рдЬреЛ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдореЗрдВ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
рдЙрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдордиреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдПрдЯреА рдПрдВрдб рдЯреА рд╕реЗ рдХреЛрдбрд╛рдВрддрд░рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛, рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдХреЗ рдСрдкрд░реЗрдВрдб рдХреЗ рд╡рд┐рд╖рдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рд╣рдордиреЗ
% rbp рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЕрдм рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдЧреНрд░рд╣реАрдд рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдереИрддрд┐рдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рд╕рдордЭрдирд╛
рд╕реНрдереИрддрд┐рдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╕реА рдХреА рдПрдХ рдмрд╣реБрдд рд╣реА рд╢рд╛рдВрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдмрд╛рд░ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдЙрдирдХреЗ рдорд╛рди рдХреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрдереИрддрд┐рдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд╛рдпрдерди-рд╢реИрд▓реА рдЬрдирд░реЗрдЯрд░ рд╣реИред рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИ рдЬреЛ INT_MAX рддрдХ рдХреА рд╕рднреА рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
#include <stdio.h> int natural_generator() { int a = 1; static int b = -1; b += 1; return a + b; } int main() { printf("%d\n", natural_generator()); printf("%d\n", natural_generator()); printf("%d\n", natural_generator()); return 0; }
рдЬрдм рдЖрдк рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рддреАрди рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛:
$ CFLAGS="-g -O0" make static cc -g -O0 static.c -o static $ ./static 1 2 3
рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ GDB рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рджреЗрдЦреЗрдВред рдореИрдВрдиреЗ рдкрддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ GDB рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЕрдм рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдм рдХреБрдЫ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ:
$ gdb static (gdb) break natural_generator (gdb) run (gdb) disassemble Dump of assembler code for function natural_generator: push %rbp mov %rsp,%rbp movl $0x1,-0x4(%rbp) mov 0x177(%rip),%eax
рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рд╡рд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдпрд╛ рдЯреАрдо рдХрд╛рдЙрдВрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ рдЬреЛ рдЕрдЧрд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрддрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред X86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ, рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ
% рд░рд┐рдк рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо
$ рд░рд┐рдк рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрджреЗрд╢ рд╕реВрдЪрдХ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░
$ рдкреАрд╕реА рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(gdb) x/i $pc 0x100000e94 <natural_generator+4>: movl $0x1,-0x4(%rbp)
рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рддреАрд╕рд░рд╛ рдирд┐рд░реНрджреЗрд╢ рдЕрднреА рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдирд┐рдореНрди рдирд┐рд░реНрджреЗрд╢ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╣рд░ рдмрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж GDB рдХреЛ рд╣рдореЗрдВ рдЕрдЧрд▓рд╛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдЦрд╛рдПрдВрдЧреЗред GDB 7.0 рдФрд░ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рдмрд╕
рд╕реЗрдЯ рдбрд┐рд╕реНрд╕реЗрдВрдмрд▓-рдиреЗрдХреНрд╕реНрдЯ-рд▓рд╛рдЗрди рдХреЛ рдХрдорд╛рдВрдб
рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рднреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЛрдб рдХреА рдЕрдЧрд▓реА рд▓рд╛рдЗрди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЬреАрдбреАрдмреА 6.3 рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ
рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрдорд╛рдВрдб
рдПрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреЙрдк рдХреЗ рдмрд╛рдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
(gdb) display/i $pc 1: x/i $pc 0x100000e94 <natural_generator+4>: movl $0x1,-0x4(%rbp)
GDB рдЕрдм рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рдЕрдЧрд▓рд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓реЗ рдЧрдП, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рддреАрд╕рд░реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХреЛрдб рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЪрд░ 1 рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреА
рд╣реИ ред
рдЕрдЧрд▓реЗ рдЖрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп, рдЬреЛ рдХреЛрдб рдХреА рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо
рдиреЗрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░реЗрдВрдЧреЗ , рдЬреЛ рдЕрдЧрд▓реЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдЖрдЗрдП рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛
% rbp - 0x4 рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдЪрд░ рдпрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:
(gdb) nexti 7 b += 1; 1: x/i $pc mov 0x177(%rip),%eax
рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрддреЗ рд╡рд╣реА рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдереАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ:
mov 0x177(%rip),%eax
рдпрд╣рд╛рдБ рд╣рдо рд▓рд╛рдЗрди рдирд┐рд░реНрджреЗрд╢
рд╕реНрдерд┐рд░ int b = -1 рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ
; , рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрд▓рдЧ рджрд┐рдЦрддрд╛ рд╣реИред рдПрдХ рддрд░рдл, рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред
-0x1 рднреА рдирд╣реАрдВ! рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬреЛ
0x100001018 рдкрддреЗ рд╕реЗ рдХреБрдЫ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдХреЗ рдмрд╛рдж рдХрд╣реАрдВ рд╕реНрдерд┐рдд рд╣реИ,
% ex рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВред GDB рд╣рдореЗрдВ рдореЗрдореЛрд░реА рдСрдкрд░реЗрдВрдб рдХреА рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐
natural_generator.b рдЗрд╕ рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдЖрдЗрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
(gdb) nexti (gdb) p $rax $3 = 4294967295 (gdb) p/x $rax $5 = 0xffffffff
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐
рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ
% рдИрдПрдХреНрд╕рдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд╣рдо
$ rax рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ GDB рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдкреВрд░реА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рдЪрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИрдВ рдпрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП GDB
% rax рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдорд╛рди рдХреЛ рдмрд┐рдирд╛
рдмрддрд╛рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП
% rax рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реБрдП :
(gdb) p (int)$rax $11 = -1
рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдордиреЗ
рдмреА рдкрд╛рдпрд╛ред рд╣рдо
x рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(gdb) x/d 0x100001018 0x100001018 <natural_generator.b>: -1 (gdb) x/d &b 0x100001018 <natural_generator.b>: -1
рдЗрд╕рд▓рд┐рдП рд╡реЗрд░рд┐рдПрдмрд▓
рдмреА рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ
рд╣рдЯрд╛рдХрд░ рди рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдХреЗ рджреВрд╕рд░реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐
рдиреЗрдЪреБрд░рд▓_рдЬреЗрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ
рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднреА -1 рд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рдЖрдкрдХреЛ
рдмреА -1 рд╕реЗ рдХреЛрдИ рдХреЛрдб рд╕реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред рдпрд╣ рд╕рдм рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪрд░
b рдХрд╛ рдорд╛рди рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рджреВрд╕рд░реЗ рдЦрдВрдб рдореЗрдВ рд╕рд┐рд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмреВрдЯрд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдорд╢реАрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд▓рдЧрддреА рд╣реИрдВред
B рдХреЛ
% ex рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХреЛрдб рдХреА рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо
b рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ:
add $0x1,%eax mov %eax,0x16c(%rip)
рдпрд╣рд╛рдВ рд╣рдо 1
%% рдИрдПрдХреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ:
(gdb) nexti 2 (gdb) x/d &b 0x100001018 <natural_generator.b>: 0 (gdb) p (int)$rax $15 = 0
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдирд┐рд░реНрджреЗрд╢ рдкрд░рд┐рдгрд╛рдо
a + b рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ:
mov -0x4(%rbp),%eax add 0x163(%rip),%eax
рдпрд╣рд╛рдБ рд╣рдо рдЪрд░ рдХреЛ
% ex рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░
b рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо рдореВрд▓реНрдп
рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП% eax рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред 1. рдЖрдЗрдП рджреЗрдЦреЗрдВ:
(gdb) nexti 2 (gdb) p $rax $16 = 1
% Eax рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
natural_generator рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдПрдХ рдЙрдкрд╕рдВрд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреИрдХ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛:
pop %rbp retq
рд╣рдордиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рд╡реЗрд░рд┐рдПрдмрд▓
b рдХреЛ рдХреИрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм
natural_generator рдлрд╝рдВрдХреНрд╢рди
рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
(gdb) continue Continuing. 1 Breakpoint 1, natural_generator () at static.c:5 5 int a = 1; 1: x/i $pc 0x100000e94 <natural_generator+4>: movl $0x1,-0x4(%rbp) (gdb) x &b 0x100001018 <natural_generator.b>: 0
рдЪреВрдБрдХрд┐ рдЪрд░
b рдХреЛ рд╢реЗрд╖ рдЪрд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА 0 рд╣реИ рдЬрдм
natural_generator рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЪрд░
b рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рдкрд┐рдЫрд▓рд╛ рдорд╛рди рд░рдЦреЗрдЧрд╛ред рдпрд╣ рд╕рдм рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд▓реЛрдбрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдХрд┐рд╕реА рднреА рдорд╢реАрди рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдордиреЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рд╕реАрдЦрд╛ред рдмрд╛рдж рдореЗрдВ, рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА рдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗред
рд╣рдордиреЗ рдХрдИ рдмрд╛рд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ GBD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред рдпрд╣ рдЙрдмрд╛рдК рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ: рдХреБрдЫ рд╕рд╛рд░ рд╕реАрдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрдирд╛рдирд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рдареЛрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рдЖрдкрдХреЛ рдЕрдореВрд░реНрддрддрд╛ рдХреА рдкрд░рддреЛрдВ рд╕реЗ рдкрд░реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕реАрдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рди рд╣реЛ рдЬрд╛рдП, рддрдм рддрдХ рдЖрдк рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдордЬрдмреВрд░ рдХрд░реЗрдВред
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдирд┐рдореНрди рд╕реНрддрд░ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрд░реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореИрдВрдиреЗ рдХреЛрдИ рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ рдХреА рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓реИрди рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред