【发布时间】:2011-07-05 03:10:05
【问题描述】:
我正在尝试使用内联汇编... 我阅读了此页面http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx,但我无法理解传递给我的函数的参数。
我正在写一个 C 写示例。这是我的函数头:
write2(char *str, int len){
}
这是我的汇编代码:
global write2
write2:
push ebp
mov ebp, esp
mov eax, 4 ;sys_write
mov ebx, 1 ;stdout
mov ecx, [ebp+8] ;string pointer
mov edx, [ebp+12] ;string size
int 0x80 ;syscall
leave
ret
我必须做什么才能将该代码传递给 C 函数...我正在做这样的事情:
write2(char *str, int len){
asm ( "movl 4, %%eax;"
"movl 1, %%ebx;"
"mov %1, %%ecx;"
//"mov %2, %%edx;"
"int 0x80;"
:
: "a" (str), "b" (len)
);
}
那是因为我没有输出变量,那我该如何处理呢? 另外,使用此代码:
global main
main:
mov ebx, 5866 ;PID
mov ecx, 9 ;SIGKILL
mov eax, 37 ;sys_kill
int 0x80 ;interruption
ret
如何将该代码内联到我的代码中.. 这样我就可以向用户询问 pid.. 像这样.. 这是我的预编码
void killp(int pid){
asm ( "mov %1, %%ebx;"
"mov 9, %%ecx;"
"mov 37, %%eax;"
:
: "a" (pid) /* optional */
);
}
【问题讨论】:
-
你想传递一个输出参数,连同 str,len ?,或者你的意思是你想发送一个你想写入 str 的文件描述符?
-
我只想传递我的字符串指针和我的字符串长度......就像它在汇编代码中看起来一样......所以,只使用系统调用,我可以将我的字符串打印到标准输出.
标签: c linux assembly x86 inline-assembly