我有一个像这样的跳转表:
jmp rax
@@table:
jmp @@seg1
jmp @@sge2
jmp @@seg3
...
这在理解 jmp 代码长度为两个字节的情况下完美地工作。我随后将代码添加到 @@seg? 代码段,现在在跳转到“更远”的代码段(标签)时会导致崩溃。
我得出的结论是,较长的跳转被编码为大于 2 的长度。不幸的是,我使用的反汇编程序停在该jmp rax
行,所以我无法确认。但结论是合乎逻辑的。
有没有办法让编译器对齐jmp @@seg
?说 4 个字节的命令,以便我保证跳转表足够大和一致的大小?如果是这样,我可以确保rax
在 4 秒内增加。
我当然不想开始手动添加nop
' 来解决这个问题。