我需要從ARM彙編語言例程中調用printf。我寫了一個可以執行相同操作的c程序(printf("%d.%d",1,2)
)。我反編譯了編譯器的輸出,但是如何傳遞格式字符串並不明顯。你們有沒有一個代碼的例子來做到這一點?從ARM彙編語言中調用c函數printf
這是我用來測試如何調用printf的測試c例程。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("%d.%d\n",1,2);
return EXIT_SUCCESS;
}
我的主程序如下所示拆卸:
000081c4 <main>:
81c4: e1a0c00d mov ip, sp
81c8: e92dd800 stmdb sp!, {fp, ip, lr, pc}
81cc: e24cb004 sub fp, ip, #4 ; 0x4
81d0: e59f0014 ldr r0, [pc, #20] ; 81ec <.text+0x11c>
81d4: e3a01001 mov r1, #1 ; 0x1
81d8: e3a02002 mov r2, #2 ; 0x2
81dc: eb000212 bl 8a2c <_IO_printf>
81e0: e3a03000 mov r3, #0 ; 0x0
81e4: e1a00003 mov r0, r3
81e8: e89da800 ldmia sp, {fp, sp, pc}
81ec: 00060120 andeq r0, r6, r0, lsr #2
我看到跳轉到_IO_printf套路,但我不明白如何將它傳遞的格式字符串。
如果你附加了反彙編的相關部分,它會更容易解釋(我們也可以確定我們說的是相同的語言方言)。 – user786653
請看我更新的問題。 – ziggle314
看起來格式字符串位於'00060120'。請注意,最後解碼的指令實際上並不意味着被解釋爲指令。 – user786653