我正在做一个简单的堆栈粉碎练习。我需要在我的程序集中写入特定偏移的短跳跃。我需要计算两个指令之间的字节数的偏移量。
我一直在谷歌搜索,但我似乎无法获得正确的搜索词。
例如,我知道mov
操作码是 2 个字节。但是整个指令将有多少字节取决于您的src
和dest
......无论您使用的是即时值还是偏移量,寻址模式是什么等。
我知道必须有一个图表或其他东西,在某个地方,我可以用来计算这个。
Aleph One's Smashing the Stack for Fun and Profit的第12页显示了我正在尝试做的事情(计算汇编代码中的字节数(: http://www-inst.eecs.berkeley.edu/~cs161/fa08/papers/stack_smashing.pdf
我需要计算两个指令之间的字节数的偏移量。
最简单的方法是将您的指令放入在线汇编程序(例如 https://defuse.ca/online-x86-assembler.htm (,让它向您显示字节。
我知道必须有一个图表或其他东西,在某个地方,我可以用来计算这个。
英特尔的软件开发人员手册第 2 卷(来自 https://software.intel.com/en-us/articles/intel-sdm 年(包含将汇编转换为机器代码(字节(所需的所有表格、规则、值和其他信息。
准备好被吓倒;这不是一个简单的过程。大多数情况下,您使用指令的名称(助记符(、CPU 的当前操作模式和指令的操作数来确定哪种寻址模式,然后确定它是哪种操作码;然后使用多个表来确定如何将操作数编码到机器代码中。