如何将 Assembly Hack 转换为二进制机器语言?
例如,下面的 hack 程序集,我如何手动将其转换为机器代码(二进制)。我只需要知道参考资料或者在哪里可以学习如何手动翻译它。
计算 R0 = 2 + 3
@2
D=A
@3
D=D+A
@0
M=D
Run Code Online (Sandbox Code Playgroud) 这些是MOV来自Intel\xc2\xae 64 和 IA-32 架构软件开发人员手册的指令操作码:
B8+ rd id MOV r32, imm32 OI Valid Valid Move imm32 to r32。
C7 /0 id MOV r/m32, imm32 MI Valid Valid Move imm32 to r/m32。
我拆解如下:
\n0: b8 44 33 22 11 mov eax, 0x11223344\nRun Code Online (Sandbox Code Playgroud)\n0: 67 c7 00 44 33 22 11 mov DWORD PTR[eax], 0x11223344\nRun Code Online (Sandbox Code Playgroud)\n我想问的问题是:
\n为什么C7操作码是寄存器/内存(r/m32, imm32)而不是仅内存(m32, imm32)?
是否有任何时候我们使用 …
是否可以编写执行以下操作的C函数?
当然,我必须将堆栈的状态恢复到手动执行这些机器指令之前的状态,但我想知道这是否可行.
托管语言是为您处理内存清理的语言.
编辑我不是在谈论垃圾收集.我只是想知道那些会free()自动记忆的语言,并且仍然可以编译成机器代码.
特别是,我正在OS X上读取Intel 32的Mach-O二进制文件格式.在FAT头之后,在第一个存档的偏移之前有一大堆填充.所有这些填充的重点是什么?
更具体地说,FAT标头和第一个存档(特别是mach_header)之间有超过4000字节的填充.为什么包括所有这些额外的字节?!OS X是否喜欢为所有通用二进制文件添加4 KB?
机器代码状态后程序会发生什么?汇编程序/编译器将高级代码或汇编代码转换为机器指令.在此阶段,机器指令仍处于软件形式并驻留在存储器中.如何将此代码转换为可由硬件处理的物理电信号?如果有某种接口设备,我想知道它是如何进行转换的.
我正在对OllyDbg中的应用程序进行一些内联修改,并注意到一些奇怪的行为.
这些是我写的指令,直接从调试器复制:
2005FE35 4C DEC ESP
2005FE36 77 21 JA SHORT 2005FE59 ; 23 byte difference
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我只修改了操作码(4C 77 21); 其他一切都由OllyDbg自动解释,这就是我的困惑.该指令应该递减ESP寄存器,然后执行21个十六进制字节的条件跳转.但是,地址0x2005FE59和0x2005FE36之间的差异不是21 - 它是23!
使用21个十六进制字节值,我观察到看似不稳定的结果.
2005FE36 77 20 JA SHORT 2005FE58 ; 22 byte difference
2005FE36 77 19 JA SHORT 2005FE51 ; 1B byte difference
2005FE36 77 17 JA SHORT 2005FE4F ; 19 byte difference
Run Code Online (Sandbox Code Playgroud)
我指示向前跳转的十六进制字节数与地址偏移量不匹配; 它似乎永远都是2.
这里发生了什么?
我想问为什么我们要处理R8到R15中的低字节,为什么不使用高字节?我们可以使用低字节但不可以使用高字节
我们有一台没有工作磁盘驱动器的Apple IIe.经过一些搜索,我发现显示器可用于编程机器代码,并找到了一个例子,但没有解释它是如何工作的. 300:20 58 FC A9 C8 20 ED FD A9 E9 20 ED FD 20 8E FD 60这是什么意思?即使在找到所有操作码之后我仍然无法弄明白它们.
我希望能够编写原始机器代码,而无需汇编或任何其他种类的高级语言,而这些语言可以直接放在闪存驱动器上并运行。我已经知道要执行此操作,我需要将主引导记录标头(我已经设法手动完成)格式化到驱动器上。我已完成此操作,并成功使用代码所在驱动器的第一个扇区(在本例中为前512个字节)中的汇编代码,使一行文本显示在屏幕上。但是,我希望能够像在MBR格式化中那样将原始的十六进制代码写入驱动器,而无需诸如汇编之类的任何工具来帮助我。我知道有一种方法可以做到这一点,但是我真的找不到任何不涉及汇编的东西。在哪里可以找到有关此信息?汇编附带了谷歌搜索机器代码或x86编程,这不是我想要的。