assembly - 从 32 位 x86 汇编代码读取,计算程序有多少字节的方法是什么

标签 assembly x86 32-bit machine-code code-size

我正在做一个简单的堆栈粉碎练习。我需要在程序集中写入特定偏移量的短跳转。我需要计算两条指令分隔的字节数的偏移量。

我一直在 google 上搜索,但似乎找不到正确的搜索词。

例如,我知道 mov 操作码是 2 个字节。但是整个指令有多少字节取决于您的srcdest...您是否使用立即数或偏移量,寻址模式是什么,等等。

我知道在某个地方必须有一个图表或其他东西,我可以用它来计算这个。

Aleph One 的《Smashing the Stack for Fun and Profit》第 12 页显示了我正在尝试做的事情(从汇编代码中计算字节数):http://www-inst.eecs.berkeley.edu/~cs161/fa08/papers/stack_smashing.pdf

最佳答案

I need to calculate the offset by how many bytes the two instructions are separated by.

最简单的方法是将指令输入在线汇编器(例如 https://defuse.ca/online-x86-assembler.htm )并让它显示字节。

I know there has to be a chart or something, somewhere, I can use to calculate this.

英特尔软件开发人员手册,第 2 卷(来自 https://software.intel.com/en-us/articles/intel-sdm)包含将汇编转换为机器代码(字节)所需的所有表格、规则、值和其他信息。

做好被吓倒的准备;这不是一个简单的过程。大多数情况下,您使用指令的名称(助记符)、CPU 当前的操作模式和指令的操作数来确定哪种寻址模式以及它是哪个操作码;然后使用多个表来确定如何将操作数编码为机器代码。

关于assembly - 从 32 位 x86 汇编代码读取,计算程序有多少字节的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57236761/

相关文章:

wix - 微星 : Upgrading 32-Bit application to 64-Bit

java - 从 Java 中找出一个 dll 是 32 位还是 64 位

c++ - 汇编代码中的引用/指针

assembly - 基于 intel 的汇编语言 idiv

c - 如何在 x86 实模式非操作系统程序集中打印字符串

assembly - 汇编语言程序中的部分

c++ - 现代硬件上的浮点与整数计算

assembly - NASM 是否在 32 位 x86 中生成的机器指令中包含段寄存器?

linux - 链接多个程序集文件

linux - 比较程序集 x86 中的数字和变量