【发布时间】:2013-12-18 00:38:55
【问题描述】:
我想在程序集中调用系统调用。问题是我不能mov ecx,rsp。 rsp 是 64 位寄存器,ecx 是 32 位寄存器。我想将缓冲区地址作为此系统调用的参数传递。我能做些什么?谢谢。
section .data
s0: db "Largest basic function number supported:%s\n",0
s0len: equ $-s0
section .text
global main
extern write
main:
sub rsp, 16
xor eax, eax
cpuid
mov [rsp], ebx
mov [rsp+4], edx
mov [rsp+8], ecx
mov [rsp+12], word 0x0
mov eax, 4
mov ebx, 1
mov ecx, rsp
mov edx, 4
int 80h
mov eax, 4
mov ebx, 1
mov ecx, s0
mov edx, s0len
int 80h
mov eax, 1
int 80h
【问题讨论】:
-
如果您正在编写一个 64 位应用程序,您应该使用64-bit way of doing syscalls 吗?
-
比特的奇怪组合是怎么回事?我感觉到有人尝试将 32 位样本合并到 64 位项目中...
标签: linux assembly x86-64 system-calls