{"id":1197,"date":"2021-08-27T18:37:19","date_gmt":"2021-08-27T10:37:19","guid":{"rendered":"https:\/\/markjohntaylor.com\/blog\/wordpress\/?p=1197"},"modified":"2021-08-28T16:23:48","modified_gmt":"2021-08-28T08:23:48","slug":"an-interesting-c-program","status":"publish","type":"post","link":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/2021\/08\/27\/an-interesting-c-program\/","title":{"rendered":"An Interesting C Program"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n\nint main()\n{\n    int i = 3;\n    int j = 4;\n    int *p = &j;\n    *(p+1) = 7;\n#if 1\n    \/\/ addr &amp;i is higher than &amp;j \n    printf(\"%d, %d\\n\", i, j); \/\/ prints 7, 4\n#else\n    \/\/ addr &amp;j is higher than &amp;i\n    printf(\"%d, %d\\n%p, %p\\n\", i, j, &amp;i, &amp;j); \/\/ prints 3, 4\n#endif\n    return 0;\n}\n<\/pre>\n\n\n\n<p><code>gdb a.out -batch -ex 'disassemble\/s main'<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"asm\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Dump of assembler code for function main:\na.c:\n4\t{\n   0x0000000000001169 &lt;+0>:\tendbr64 \n   0x000000000000116d &lt;+4>:\tpush   %rbp\n   0x000000000000116e &lt;+5>:\tmov    %rsp,%rbp\n   0x0000000000001171 &lt;+8>:\tsub    $0x20,%rsp\n   0x0000000000001175 &lt;+12>:\tmov    %fs:0x28,%rax\n   0x000000000000117e &lt;+21>:\tmov    %rax,-0x8(%rbp)\n   0x0000000000001182 &lt;+25>:\txor    %eax,%eax\n\n5\t    int i = 3;\n   0x0000000000001184 &lt;+27>:\tmovl   $0x3,-0x14(%rbp)\n\n6\t    int j = 4;\n   0x000000000000118b &lt;+34>:\tmovl   $0x4,-0x18(%rbp)\n\n7\t    int *p = &j;\n   0x0000000000001192 &lt;+41>:\tlea    -0x18(%rbp),%rax\n   0x0000000000001196 &lt;+45>:\tmov    %rax,-0x10(%rbp)\n\n8\t    *(p+1) = 7;\n   0x000000000000119a &lt;+49>:\tmov    -0x10(%rbp),%rax\n   0x000000000000119e &lt;+53>:\tadd    $0x4,%rax\n   0x00000000000011a2 &lt;+57>:\tmovl   $0x7,(%rax)\n\n9\t#if 1\n10\t    \/\/ addr &amp;i is higher than &amp;j \n11\t    printf(\"%d, %d\\n\", i, j); \/\/ prints 7, 4\n   0x00000000000011a8 &lt;+63>:\tmov    -0x18(%rbp),%edx\n   0x00000000000011ab &lt;+66>:\tmov    -0x14(%rbp),%eax\n   0x00000000000011ae &lt;+69>:\tmov    %eax,%esi\n   0x00000000000011b0 &lt;+71>:\tlea    0xe4d(%rip),%rdi        # 0x2004\n   0x00000000000011b7 &lt;+78>:\tmov    $0x0,%eax\n   0x00000000000011bc &lt;+83>:\tcallq  0x1070 &lt;printf@plt>\n\n12\t#else\n13\t    \/\/ addr &amp;j is higher than &amp;i\n14\t    printf(\"%d, %d\\n%p, %p\\n\", i, j, &amp;i, &amp;j); \/\/ prints 3, 4\n15\t#endif\n16\t    return 0;\n   0x00000000000011c1 &lt;+88>:\tmov    $0x0,%eax\n\n17\t}\n   0x00000000000011c6 &lt;+93>:\tmov    -0x8(%rbp),%rcx\n   0x00000000000011ca &lt;+97>:\txor    %fs:0x28,%rcx\n   0x00000000000011d3 &lt;+106>:\tje     0x11da &lt;main+113>\n   0x00000000000011d5 &lt;+108>:\tcallq  0x1060 &lt;__stack_chk_fail@plt>\n   0x00000000000011da &lt;+113>:\tleaveq \n   0x00000000000011db &lt;+114>:\tretq   \nEnd of assembler dump.<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"asm\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Dump of assembler code for function main:\na.c:\n4\t{\n   0x0000000000001169 &lt;+0>:\tendbr64 \n   0x000000000000116d &lt;+4>:\tpush   %rbp\n   0x000000000000116e &lt;+5>:\tmov    %rsp,%rbp\n   0x0000000000001171 &lt;+8>:\tsub    $0x20,%rsp\n   0x0000000000001175 &lt;+12>:\tmov    %fs:0x28,%rax\n   0x000000000000117e &lt;+21>:\tmov    %rax,-0x8(%rbp)\n   0x0000000000001182 &lt;+25>:\txor    %eax,%eax\n\n5\t    int i = 3;\n   0x0000000000001184 &lt;+27>:\tmovl   $0x3,-0x18(%rbp)\n\n6\t    int j = 4;\n   0x000000000000118b &lt;+34>:\tmovl   $0x4,-0x14(%rbp)\n\n7\t    int *p = &j;\n   0x0000000000001192 &lt;+41>:\tlea    -0x14(%rbp),%rax\n   0x0000000000001196 &lt;+45>:\tmov    %rax,-0x10(%rbp)\n\n8\t    *(p+1) = 7;\n   0x000000000000119a &lt;+49>:\tmov    -0x10(%rbp),%rax\n   0x000000000000119e &lt;+53>:\tadd    $0x4,%rax\n   0x00000000000011a2 &lt;+57>:\tmovl   $0x7,(%rax)\n\n9\t#if 0\n10\t    \/\/ addr &amp;i is higher than &amp;j \n11\t    printf(\"%d, %d\\n\", i, j); \/\/ prints 7, 4\n12\t#else\n13\t    \/\/ addr &amp;j is higher than &amp;i\n14\t    printf(\"%d, %d\\n%p, %p\\n\", i, j, &amp;i, &amp;j); \/\/ prints 3, 4\n   0x00000000000011a8 &lt;+63>:\tmov    -0x14(%rbp),%edx\n   0x00000000000011ab &lt;+66>:\tmov    -0x18(%rbp),%eax\n   0x00000000000011ae &lt;+69>:\tlea    -0x14(%rbp),%rsi\n   0x00000000000011b2 &lt;+73>:\tlea    -0x18(%rbp),%rcx\n   0x00000000000011b6 &lt;+77>:\tmov    %rsi,%r8\n   0x00000000000011b9 &lt;+80>:\tmov    %eax,%esi\n   0x00000000000011bb &lt;+82>:\tlea    0xe42(%rip),%rdi        # 0x2004\n   0x00000000000011c2 &lt;+89>:\tmov    $0x0,%eax\n   0x00000000000011c7 &lt;+94>:\tcallq  0x1070 &lt;printf@plt>\n\n15\t#endif\n16\t    return 0;\n   0x00000000000011cc &lt;+99>:\tmov    $0x0,%eax\n\n17\t}\n   0x00000000000011d1 &lt;+104>:\tmov    -0x8(%rbp),%rdi\n   0x00000000000011d5 &lt;+108>:\txor    %fs:0x28,%rdi\n   0x00000000000011de &lt;+117>:\tje     0x11e5 &lt;main+124>\n   0x00000000000011e0 &lt;+119>:\tcallq  0x1060 &lt;__stack_chk_fail@plt>\n   0x00000000000011e5 &lt;+124>:\tleaveq \n   0x00000000000011e6 &lt;+125>:\tretq   \nEnd of assembler dump.<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>gdb a.out -batch -ex &#8216;disassemble\/s main&#8217;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,14],"tags":[],"_links":{"self":[{"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1197"}],"collection":[{"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=1197"}],"version-history":[{"count":12,"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1197\/revisions"}],"predecessor-version":[{"id":1232,"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1197\/revisions\/1232"}],"wp:attachment":[{"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=1197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=1197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/markjohntaylor.com\/blog\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=1197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}