在x86中输出指向stdout的指针?

时间:2011-07-27 21:57:00

标签: assembly

所以我有以下代码,它使用mmap linux系统调用分配内存。执行这些指令后,指向已分配内存的指针存储在eax中。如何以人类可读的形式打印此指针,例如“00ffbfff”。

我理解如何使用write系统调用打印到stdout,但我想知道如何将存储在eax中的值转换为其十六进制表示。

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

1 个答案:

答案 0 :(得分:0)

您需要编写自己的int-to-text例程,或者只需链接标准运行时库并调用printf()系统调用。您必须阅读汇编程序如何处理链接库函数并导入其符号和调用约定,但如果您知道正在执行的操作,则可以从汇编中调用任何C函数。