繁体   English   中英

编写AT&T程序集以使用奇偶校验标志和偏移量

[英]Writing AT&T assembly to work with parity flag and offsets

我在x64上有一组特定的指令,这些指令最终要么设置了奇偶校验标志,要么取消了它。 我想写一些跳过设置奇偶校验标志的指令的程序集。 根据我在线阅读的手册, jpe是一条指令,如果设置了奇偶校验标志,则跳转jpo是一条指令,如果未设置奇偶校验标志,则跳转。

如果设置了奇偶校验位,我要求执行向前跳3个字节。 最初,我尝试了以下操作,但是它只是跳转到地址0x3而不是RIP的偏移量。

jpe 0x3

我意识到,如果使用Intel语法,则可以执行以下操作。

jpe $+0x3

但是,这似乎不适用于AT&T,并且出现以下错误消息。

test.c: Assembler messages:
test.c:46: Error: operand type mismatch for `jpe'

我怎样才能解决这个问题?

GAS一直希望控制跳跃,请参阅官方文档

正如Jester所提到的,您可以使用.+3作为标签,其中的点代表实际行的地址(如其他汇编器中的'$')。 GAS将计算相对距离和适当的跳跃。 有一个警告:虽然点是实际行的地址,但是相对跳转是根据下一条指令的地址计算的。 因此jpe .+3产生7A 01 = jpe short 1

另一种选择是使用标签。 我建议使用甚至可以重新定义的本地标签

mov $0b110, %eax        # Parity = even
test %eax, %eax         # Set PF
jpe 0f                  # Jump forward to the next "0:"
.byte 0,0,0
0:                      # Local label

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM