我反编译了一个程序,其中有一个函数,它只有一个有用的指令,即
xor eax, eax
retn
在一个额外的函数中使用 this 的目的是什么,而不是在调用的地方使用xor eax, eax或mov eax, 0?
- 笔记:
- 大多数时候直接调用
call sub_41063A(函数的地址),有时加载它的地址mov esi, offset sub_41063A - 它是一个 x68_64 架构
- 我不知道,用的是哪个编译器
- 大多数时候直接调用
编辑:
代码示例:(我将函数命名为“clearEAX”)
函数本身:
.text:000000000041063A
.text:000000000041063A clearEAX proc near ; CODE XREF: sub_40E4B4+37p
.text:000000000041063A ; sub_40E528+DFp ...
.text:000000000041063A xor eax, eax ; Logical Exclusive OR
.text:000000000041063C retn ; Return Near from Procedure
.text:000000000041063C clearEAX endp
.text:000000000041063C
.text:000000000041063D
它的地址被引用 (0x4113B2) 它在上下文中被直接调用:(0x4113CB)
.text:00000000004113AC push rbp
.text:00000000004113AD mov edx, offset unk_514200
.text:00000000004113B2 mov esi, offset clearEAX
.text:00000000004113B7 push rbx
.text:00000000004113B8 mov ebx, edi
.text:00000000004113BA sub rsp, 28h ; Integer Subtraction
.text:00000000004113BE mov rdi, rsp
.text:00000000004113C1 call nullsub_3 ; Call Procedure
.text:00000000004113C6 mov edi, offset unk_514200
.text:00000000004113CB call clearEAX ; Call Procedure
.text:00000000004113D0 mov rax, cs:qword_514398
.text:00000000004113D7 test rax, rax ; Logical Compare
.text:00000000004113DA jz short loc_4113E0 ; Jump if Zero (ZF=1)
.text:00000000004113DC mov edi, ebx
.text:00000000004113DE call rax ; qword_514398 ; Indirect Call Near Procedure
.text:00000000004113E0
但是,我不认为上下文在这里很重要,因为上下文远非相似。这意味着它不是先移动地址然后调用它或类似的组合。