我需要从ARM汇编语言例程调用printf。我写了一个执行相同操作的ac程序(printf("%d.%d",1,2)
)。我反汇编了编译器输出,但格式字符串的传递方式并不明显。你们有没有一个代码的例子来做到这一点?
这是我用来尝试查看如何调用printf的测试例程。
#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例程的分支,但我没有看到如何传递格式字符串。
发布于 2018-08-24 10:20:51
你的代码等同于:
const char formatString[] = "%d.%d";
printf(&formatString[0], 1, 2);
https://stackoverflow.com/questions/-100002391
复制相似问题