模糊的C/asm"你好,世界!" 程序,我不明白

gue*_*est 0 c obfuscation assembly

为什么以下代码打印"Hello,world!" (在"我的"系统上)?

        .file   "test.c"
.globl main
        .data
        .align 32
        .type   main, @object
        .size   main, 56
main:
        .value  3816
        .value  0
        .value  18432
        .value  27749
        .value  28524
        .value  8236
        .value  28535
        .value  27762
        .value  8548
        .value  -29942
        .value  9228
        .value  7305
        .value  -17884
        .value  14
        .value  0
        .value  20818
        .value  443
        .value  0
        .value  21248
        .value  1208
        .value  0
        .value  -32000
        .value  1260
        .value  -32563
        .value  -15229
        .value  23312
        .value  -16335
        .value  -28477
Run Code Online (Sandbox Code Playgroud)

还有,.value意思是什么,它将如何转化为机器代码?

chr*_*too 5

我组装它然后拆开它,这就是我得到的.我没有运行它,因为我知道比在网上运行随机的汇编语言更好.

代码首先分支到打印代码:

00000000 <main>:
   0:   e8 0e 00 00 00          call   13 <main+0x13>
Run Code Online (Sandbox Code Playgroud)

然后按照ASCII"Hello,World!\n":

   5:   48 65 6c 6c 6f 2c 20
   c:   77 6f 72 6c 64 21 0a
Run Code Online (Sandbox Code Playgroud)

代码在第一条指令中跳转到:

  13:   8b 0c 24                mov    (%esp),%ecx
  16:   89 1c 24                mov    %ebx,(%esp)
  19:   ba 0e 00 00 00          mov    $0xe,%edx
  1e:   52                      push   %edx
  1f:   51                      push   %ecx
  20:   bb 01 00 00 00          mov    $0x1,%ebx
  25:   53                      push   %ebx
  26:   b8 04 00 00 00          mov    $0x4,%eax
  2b:   83 ec 04                sub    $0x4,%esp
  2e:   cd 80                   int    $0x80
  30:   83 c4 10                add    $0x10,%esp
  33:   5b                      pop    %ebx
  34:   31 c0                   xor    %eax,%eax
  36:   c3                      ret
  37:   90                      nop
Run Code Online (Sandbox Code Playgroud)

FWIW,使用的方法是将代码粘贴到文件中foo.S,然后:

gcc -S foo.S
objdump -D foo.o
Run Code Online (Sandbox Code Playgroud)