首页 / LINUX / linux-汇编和系统调用
linux-汇编和系统调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-汇编和系统调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1417字,纯文字阅读大概需要3分钟。
内容图文
![linux-汇编和系统调用](/upload/InfoBanner/zyjiaocheng/950/0398805e0a7248e488d66f6943ce6564.jpg)
我在理解组装中更复杂的系统调用时遇到了一些麻烦.我写了一个exec系统调用,效果很好
.bss
.text
.globl _start
_start:
#exit(0) system call
movl $1, %rax
movl $0, %rbx
int $0X80
虽然我有一点保证,但还无法找到有关如何将字符串放入寄存器的信息.因此,作为一个示例,我想执行一个exec系统调用,它作为第一个参数需要运行文件名,并且我想运行“ / bin / bash”,但是如何在rbx中获取它.我什至不知道我必须使用rbx,在X86中我知道我将使用ebx,在amd64 ebx = rbx,ecx = rcs等中是否存在相同的关系.
int execve(const char * filename,char * const argv [],
char * const envp []);
谢谢大家
解决方法:
这是在汇编的这些方面快速取得进展的技巧:让C编译器向您展示它是如何实现的!编写一个可以执行您想要的工作的C程序,然后键入gcc -S.
例:
Manzana:ppc pascal$cat t.c
#define NULL ((void*)0)
char *args[] = { "foo", NULL } ;
char *env[] = { "PATH=/bin", NULL } ;
int execve(const char *filename, char *const argv[], char *const envp[]);
int main()
{
execve("/bin/bash", args, env);
}
然后:
Manzana:ppc pascal$gcc -S -fno-PIC t.c # added no-PIC for readability of generated code
Manzana:ppc pascal$cat t.s
.globl _args
.cstring
LC0:
.ascii "foo\0"
.data
.align 2
_args:
.long LC0
.long 0
.globl _env
.cstring
LC1:
.ascii "PATH=/bin\0"
.data
.align 2
_env:
.long LC1
.long 0
.cstring
LC2:
.ascii "/bin/bash\0"
.text
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $_env, 8(%esp)
movl $_args, 4(%esp)
movl $LC2, (%esp)
call _execve
leave
ret
.subsections_via_symbols
内容总结
以上是互联网集市为您收集整理的linux-汇编和系统调用全部内容,希望文章能够帮你解决linux-汇编和系统调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。