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