所以我有以下代码,它使用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
答案 0 :(得分:0)
您需要编写自己的int-to-text例程,或者只需链接标准运行时库并调用printf()
系统调用。您必须阅读汇编程序如何处理链接库函数并导入其符号和调用约定,但如果您知道正在执行的操作,则可以从汇编中调用任何C函数。