我目前正在研究一個小的ASM程序,它捕獲進程ID,然後將它寫出屏幕。系統寫入整數
下面是代碼:
SECTION .bss
Pid: resb 4
SECTION .text
global start
start:
mov eax, 0x14 ; System call 20 - Get PID
push eax ; Push to stack for BSD
int 0x80 ; Call
mov edx, eax ; Save return value in EDX
add esp, 0x4 ; Clean up the stack
push 0x4 ; Push lenth of 4 bytes
mov [Pid], edx ; Move address to Pid Buffer
push Pid
push 0x1 ; Set file descriptor as 1 (stdout)
mov eax, 0x4 ; Set system call 4 - Write
push eax ; Push the system call to stack
int 0x80 ; Call
add esp, 0x10 ; Clean up the stack
mov eax, 1 ; Set call 1 - sys_exit
mov ebx, 0 ; All went well
int 0x80 ; Call
我的問題是,該方案正在打印PID爲一個字符串,而不是一個整數,也說明這裏有不同的輸出格式顯示在GDB相同的地址。
String: 0x2016 <Pid>: "z\035"
Hex: 0x2016 <Pid>: 0x00001d7a
Integer: 0x2016 <Pid>: 7546
系統寫入調用打印字符串,我需要它打印整數。
有沒有一些技巧可以做到這一點,或者我錯過了明顯的東西?
哪個數字系統(二進制,十進制,十六進制),要使用? – nrz 2013-03-14 20:30:35
我希望它返回一個無符號整數。 – 2013-03-14 20:36:12
操作系統的返回值?那麼這根本就不在於印刷。在這種情況下,'mov eax,1','mov ebx,my_value','int 0x80'。或者你的意思是打印一個十進制無符號整數? – nrz 2013-03-14 20:38:40