ARMアセンブリ言語ルーチンからprintfを呼び出す必要があります。私は同じ操作(printf("%d.%d",1,2)
)を行うcプログラムを書いています。私はコンパイラの出力を逆アセンブルしましたが、フォーマット文字列がどのように渡されるかは明白ではありません。これを行うコードの例はありますか?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