从 32 位 x86 汇编代码中读取的计算程序字节数的方法是什么

What is the method for counting how many bytes your program will be, reading from 32 bit x86 assembly code

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

我一直在搜索 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 的当前操作模式和指令的操作数来确定哪种寻址模式,然后确定它是哪个操作码;然后使用多个表来确定如何将操作数编码为机器码。