1

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

我一直在搜索谷歌,但我似乎无法获得正确的搜索词。

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

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

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

4

1 回答 1

2

我需要通过两条指令分隔的字节数来计算偏移量。

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

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

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

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

于 2019-07-28T00:58:44.043 回答