[英]How program counter is manipulated in powerpc assembler
在powerpc汇编程序中此指令的结果是什么?
. = 0x100
我认为这涉及程序计数器,但是反汇编使用此指令的可执行文件,则会在输出中发生一些奇怪的情况。 这是简单的代码:
int main()
{
__asm__(". = 0x100");
return 0;
}
这是反汇编的代码:
$ gcc -o prog main.c
$ objdump -d prog
[...]
100003dc <main>:
100003dc: 94 21 ff f0 stwu r1,-16(r1)
100003e0: 93 e1 00 0c stw r31,12(r1)
100003e4: 7c 3f 0b 78 mr r31,r1
...
100004dc: 38 00 00 00 li r0,0
100004e0: 7c 03 03 78 mr r3,r0
100004e4: 81 61 00 00 lwz r11,0(r1)
100004e8: 83 eb ff fc lwz r31,-4(r11)
100004ec: 7d 61 5b 78 mr r1,r11
100004f0: 4e 80 00 20 blr
[...]
通过该指令,出现了三个点。 它们是什么意思? GAS如何做到这一点?
谢谢你们!
.
正确地设置当前位置计数器 。 在您的示例中,您已将位置计数器设置为main()+0x100
,即0x100003dc+0x100 = 0x100004dc
。 但是,在0x100003e4
处的指令之后,直到地址0x100004dc
都将没有有效的指令(通常在这里分支)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.