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意思是什么,它将如何转化为机器代码?
我组装它然后拆开它,这就是我得到的.我没有运行它,因为我知道比在网上运行随机的汇编语言更好.
代码首先分支到打印代码:
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)
| 归档时间: |
|
| 查看次数: |
983 次 |
| 最近记录: |