我想编写一些汇编代码,可以找出它是运行在x86还是x64二进制文件中(我之所以要做这么奇怪的事情是因为我会在任何给定的二进制文件中注入此代码,并且当代码时运行时,它将确定它应该执行哪种系统调用并运行代码的那一部分。没有任何恶意,只是一个" hello world"在作为练习传递到实际入口点之前)。
无论如何,一个解决方案'我想到的是:
这是我能得到的最接近的:
0: 54 push rsp
1: 54 push rsp
2: 5b pop rbx
3: 58 pop rax
4: 48 29 d8 sub rax,rbx <---
7: 83 f8 08 cmp eax,0x8
a: 74 ?? je 64_bit_code_addr
这会为x86生成相同的字节,但地址0x4处的0x48除外。如何以独立于架构的方式编写该指令?或者我可以用什么其他解决方案来实现这种效果?
(请不要提供开箱即用的解决方案,例如&#34;您可以通过检查ELF文件的EI_CLASS偏移量来确定可执行文件的类别&#34;等等。)
答案 0 :(得分:2)
它可以更简单,使用那个在32位代码中的REX.W是DEC:
48 90
在64位代码中是:
rex.w nop ; still a nop
和32位代码:
dec eax
nop
当然,在它之前加上xor eax, eax
之类的东西。