我正在尝试更改存储在dwarf堆栈中的多字节数据(不大于泛型类型)的字节顺序。我已经检查了dwarfv5 DW_OP_xxx运算符,但找不到任何可以交换字节的运算符。虽然我可以使用移位/掩码/按位等操作列表来完成,但每次我想要进行更改时,这会创建大约25个DW_OPs。
我知道dwarf_subroutines,有没有人知道我们是否有一个(或两个) dwarf操作符来交换dwarf堆栈值顶部的字节。(或DWARFv5的任何增强问题)或任何非标准扩展。
提前谢谢。
发布于 2020-01-11 01:31:09
DWARF堆栈机器具有按位操作-移位、AND、OR。
用常规符号表示的两字节值的字节交换是:
(a >> 8) | (a << 8)如果翻译成堆栈机器语言,假设a在开始时位于堆栈顶部,则可能会这样:
#a
dup #a a
const1u 8 #8 a a
swap #a 8 a
shr #a>>8 a
swap #a a>>8
const1u 8 #8 a a>>8
swap #a 8 a>>8
shl #a<<8 a>>8
or #Bingo!对于一个4字节的常量,它会更加复杂。您必须使用AND分隔字节,将它们移到正确的位置,最后将它们放在一起进行OR运算。
https://stackoverflow.com/questions/58411224
复制相似问题