2011-07-27 10 views
2

그래서 다음 코드를 가지고 있습니다.이 코드는 mmap linux 시스템 호출을 사용하여 메모리를 할당합니다. 이러한 명령어를 실행 한 후 할당 된 메모리에 대한 포인터는 eax에 저장됩니다. 이 포인터를 사람이 읽을 수있는 형식 (예 : "00ffbfff")으로 인쇄하려면 어떻게해야합니까?x86에서 stdout에 대한 포인터를 출력합니까?

쓰기 시스템 호출을 사용하여 stdout으로 인쇄하는 방법을 알고 있지만 eax에 저장된 값을 16 진수 표현으로 변환하는 방법을 알고 싶습니다.

section .text 
global _start 

_start: 

    ; mmap struct 

    push 0  ; 
    push -1  ; set the file dsc to -1 for MAP_ANONYMOUS 
    push 0x20  ; set MAP_ANONYMOUS 
    push 0x07  ; set Protections WRX 
    push 0x04  ; size to allocate 
    push 0  ; geuss - Not Applicable 

    ;; syscall 

    push eax, 90 ; mmap opcode 
    push ebx, esp ; mmap struct 
    int 0x80  ; execute the system call 

    ; allocated address in in eax 

답변

0

어느 쪽이든 당신은 당신의 자신의 INT - 텍스트 루틴을 작성해야하거나 표준 런타임 라이브러리를 링크하고 printf() 시스템 호출을 호출 만 할 수 있습니다. 어셈블러에서 링크 된 라이브러리 함수를 처리하고 심볼 및 호출 규칙을 가져 오는 방법을 읽어야하지만, 수행중인 작업을 알고있는 경우 어셈블리에서 C 함수를 호출 할 수 있습니다.

관련 문제