我有一个像这样的跳转表:
jmp rax
@@table:
jmp @@seg1
jmp @@sge2
jmp @@seg3
...
这完全符合jmp代码长度为两个字节的理解。我随后在@@ seg中添加了代码?代码段,当跳转到“更远的”代码段(标签)时,现在导致崩溃。
我得出结论,长跳转的编码长度大于2.不幸的是,我使用的反汇编停在jmp rax
行,所以我无法确认。但结论是合乎逻辑的。
有没有办法让编译器对齐jmp @@seg
?说4个字节的命令,这样我就可以保证足够大且一致的跳转表大小?如果是这样,我可以在4s内确保rax
增量。
我当然不想手动添加nop
以试图解决此问题。