Как манипулировать счетчиком программ в ассемблере powerpc - PullRequest
0 голосов
/ 13 сентября 2011

Каков результат этой инструкции в ассемблере 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
[...]

С этой инструкцией появилось три точки.В чем их смысл?Как ГАЗ это терзает?

Спасибо всем!

1 Ответ

1 голос
/ 13 сентября 2011

. устанавливает текущий счетчик местоположения , как вы правильно догадались.В вашем примере вы установили счетчик местоположения на main()+0x100, то есть 0x100003dc+0x100 = 0x100004dc.Однако после указания на 0x100003e4 до адреса 0x100004dc не будет действительных инструкций (обычно вы выполняете здесь переход).

...