标签: machine-code

二进制机器语言的汇编黑客

如何将 Assembly Hack 转换为二进制机器语言?

例如,下面的 hack 程序集,我如何手动将其转换为机器代码(二进制)。我只需要知道参考资料或者在哪里可以学习如何手动翻译它。

计算 R0 = 2 + 3

@2
D=A
@3
D=D+A
@0
M=D
Run Code Online (Sandbox Code Playgroud)

assembly machine-code nand2tetris

1
推荐指数
1
解决办法
1680
查看次数

MOV r/m32、imm32 和 MOV r32、imm32 之间的操作码差异

这些是MOV来自Intel\xc2\xae 64 和 IA-32 架构软件开发人员手册的指令操作码:

\n

B8+ rd id MOV r32, imm32 OI Valid Valid Move imm32 to r32

\n

C7 /0 id MOV r/m32, imm32 MI Valid Valid Move imm32 to r/m32

\n

我拆解如下:

\n
0:  b8 44 33 22 11          mov    eax, 0x11223344\n
Run Code Online (Sandbox Code Playgroud)\n
0:  67 c7 00 44 33 22 11    mov    DWORD PTR[eax], 0x11223344\n
Run Code Online (Sandbox Code Playgroud)\n

我想问的问题是:

\n
    \n
  • 为什么C7操作码是寄存器/内存(r/m32, imm32)而不是仅内存(m32, imm32)?

    \n
  • \n
  • 是否有任何时候我们使用 …

assembly x86-64 machine-code opcode instruction-encoding

1
推荐指数
1
解决办法
237
查看次数

C中的一种自修改程序

是否可以编写执行以下操作的C函数?

  1. 在堆中分配一堆内存
  2. 在其中写入机器代码
  3. 执行那些机器指令

当然,我必须将堆栈的状态恢复到手动执行这些机器指令之前的状态,但我想知道这是否可行.

c heap machine-code

0
推荐指数
1
解决办法
588
查看次数

是否有任何托管编程语言可以编译为机器代码?

托管语言是为您处理内存清理的语言.

编辑我不是在谈论垃圾收集.我只是想知道那些会free()自动记忆的语言,并且仍然可以编译成机器代码.

managed-code machine-code

0
推荐指数
2
解决办法
1205
查看次数

填充有什么意义?

特别是,我正在OS X上读取Intel 32的Mach-O二进制文件格式.在FAT头之后,在第一个存档的偏移之前有一大堆填充.所有这些填充的重点是什么?

更具体地说,FAT标头和第一个存档(特别是mach_header)之间有超过4000字节的填充.为什么包括所有这些额外的字节?!OS X是否喜欢为所有通用二进制文件添加4 KB?

binary mach-o machine-code universal

0
推荐指数
1
解决办法
158
查看次数

在什么阶段软件转换为实际的硬件信号?

机器代码状态后程序会发生什么?汇编程序/编译器将高级代码或汇编代码转换为机器指令.在此阶段,机器指令仍处于软件形式并驻留在存储器中.如何将此代码转换为可由硬件处理的物理电信号?如果有某种接口设备,我想知道它是如何进行转换的.

hardware assembly machine-code hardware-interface

0
推荐指数
3
解决办法
2537
查看次数

调试器中观察到的ASM跳转指令不精确

我正在对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.

这里发生了什么?

x86 assembly reverse-engineering machine-code ollydbg

0
推荐指数
1
解决办法
170
查看次数

为什么在R8至R15中不使用高字节?

我想问为什么我们要处理R8到R15中的低字节,为什么不使用高字节?我们可以使用低字节但不可以使用高字节

assembly x86-64 machine-code cpu-registers

0
推荐指数
1
解决办法
831
查看次数

Apple IIe显示器中的6502机器代码

我们有一台没有工作磁盘驱动器的Apple IIe.经过一些搜索,我发现显示器可用于编程机器代码,并找到了一个例子,但没有解释它是如何工作的. 300:20 58 FC A9 C8 20 ED FD A9 E9 20 ED FD 20 8E FD 60这是什么意思?即使在找到所有操作码之后我仍然无法弄明白它们.

assembly 6502 machine-code

0
推荐指数
1
解决办法
243
查看次数

如何在不使用汇编的情况下为x86编写原始机器代码?

我希望能够编写原始机器代码,而无需汇编或任何其他种类的高级语言,而这些语言可以直接放在闪存驱动器上并运行。我已经知道要执行此操作,我需要将主引导记录标头(我已经设法手动完成)格式化到驱动器上。我已完成此操作,并成功使用代码所在驱动器的第一个扇区(在本例中为前512个字节)中的汇编代码,使一行文本显示在屏幕上。但是,我希望能够像在MBR格式化中那样将原始的十六进制代码写入驱动器,而无需诸如汇编之类的任何工具来帮助我。我知道有一种方法可以做到这一点,但是我真的找不到任何不涉及汇编的东西。在哪里可以找到有关此信息?汇编附带了谷歌搜索机器代码或x86编程,这不是我想要的。

x86 machine-code low-level

0
推荐指数
2
解决办法
687
查看次数