Я хочу вызвать системный вызов в сборке. Проблема в том, что я не могу mov ecx,rsp
. rsp
- это 64-разрядный регистр, ecx
- это 32-разрядный регистр. Я хочу передать буфер addr в качестве параметра этого syscall. Что я могу сделать? Благодарю.linux assembly: как позвонить в syscall?
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-битный способ делать системные вызовы] (http://blog.rchapman.org/ post/36801038863/linux-system-call-table-for-x86-64)? – Michael
Что с странным сочетанием битности? Я чувствую попытку объединить 32-битный образец в 64-битный проект ... –