프로그래밍/리버싱

인자가 다수인 함수

knxwledge 2026. 10. 10. 22:48

개요

어셈블리에서 인자가 다수인 함수 사용 시 기본 구문은 다음과 같다.

push [n번째 인자]
push [n-1번째 인자]
...
push [첫번째 인자]
call [함수]

 

이를 활용하여 다음 C 프로그램을 어셈블리로 작성해 볼 것이다.

printf("hello, %s\n", "assembly");

 

활용 프로그램: x32dbg


상세

1. 메모리에 필요한 문자열을 적재한다. 어셈블리에서는 쌍따옴표가 필요없다.

 

2. 점프 테이블에서 printf 함수의 주소를 복사한다.

 

3. 코드를 작성한다.

push 0x403040    // assembly
push 0x403030    // hello %s\n
call 0x402614    // printf

 

4. 실행 결과를 확인한다.


주의 사항

메모리 주소에서 Edit을 통해서 \n을 입력할 경우, 문자열로 \n이 그대로 출력된다.

 

따라서 Edit에서는 'hello world %s'만 입력하고, 좌측 하단 dump에서 스페이스 바를 눌러 개행문자를 뜻하는 0A를 입력했다.