linux下64位汇编的系统调用系列】的更多相关文章

http://blog.csdn.net/mydo/article/category/3084893…
知道了syscall调用号之后还不算完,还要搞清楚2件事: 1 每种调用号需要传递哪些参数: 2 调用如何传递参数以及结果如何返回: 第一个问题的答案是: 在linux系统中某个程序执行时进行的系统调用可以通过strace命令来查看,solaris中对应的命令为dtrace,而mac os x中可以通过类似的dtruss命令来查看.当进程已经处于 D 状态(uninterruptible sleep)时,strace 也帮不上忙.这时候可以通过: cat /proc/<PID>/syscall…
背景知识基本交代清楚了,下面我们实际写一个小例子看一下.代码的功能很简单,显示一行文本,然后退出.我们使用了syscall中的write和exit调用,查一下前面的调用号和参数,我们初步总结如下: write(即sys_write)调用号为1,需传递3个参数 unsigned int fd const char *buf size_t count exit(sys_exit)调用号为60,只需传递一个错误码 int error_code 如果该值为0表示程序执行成功. 因为以上两个调用最多的也只…
现在基本上系统都是64位了,而64位系统下的汇编和32位有了较大的变化,无论是系统调用的接口还是C标准库的接口都和32位汇编有所不同:下面简单谈一下在64位linux下如何利用汇编直接调用系统调用. 需要准备的有: 1.一台linux机器:我的系统是ubuntu 14.10 x64版: 2.还要一个汇编器:我没有使用gas,而是使用了跨平台的nasm: 3.一个调试器:这里选择的不多,要不就是gdb,要不就是lldb,不过这里选择前者. 4.一个编辑器,linux下有很多优秀的语法编辑器,这里用…
看到这里大家都基本知道了如何进行linux下的汇编系统调用:不过有些童鞋可能会问:那些C库中函数里为我们解决的额外汇编代码你是怎么知道的? 好吧,我承认:我是通过逆向知道的,这貌似有点犯规的嫌疑- 比如举个例子,那上一篇里的mmap C库函数来说,首先写一个C代码: #include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include <sys/mman.h> #include <sy…
经过上一篇的铺垫貌似可以很轻松的用汇编写出mmap的代码来,可仔细一看,还是有不少问题需要解决: 1.系统调用mmap如果出错并不直接返回MAP_FAILED(-1),而是一个"类似"值:C库中的mmap函数对其做了包装,使其最终返回-1:如果我们直接调用mmap syscall,则这些事必须自己来做. 2.C库函数如果出错会设置errno的值,而在汇编中没法直接用: extern errno 的方法使用外部的值,连接时会报错: /usr/bin/ld: errno: TLS defi…
1 首先系统调用号大大的不同:mac64和linux32的系统调用号也不同(虽然局部可能有相同) 2 mac64的系统调用号在: /usr/include/sys/syscall.h 可以查到,但是调用的时候其值要加上0x2000000,可以写一个宏处理: %define mk64 0x2000000+ 使用方式如下: mov rax,mk64 1 ;exit NO mov rdi,0 ;error_code syscall 3 如果在mac64下汇编要与C库相链接,所有extern符号名前要加…
传递给系统调用的参数必须安装参数顺序一次放到寄存器中,当系统调用完成后,返回值放在eax中: 当系统调用参数<=5个时: eax中存放系统调用的功能号,传递给系统调用的参数顺序依次放到寄存器:ebx,ecx,edx,esi,edi中 当系统调用参数>5个时: eax中存放系统调用的功能号,全部参数应依次放在一块连续的内存区域中,同时在寄存器ebx中保存指向该内存区域的指针(内存块的首地址):linux采用的是C调用模式,这意味着如果要以stack来实现这个连续的内存块(当然可以用其他方式实现,…
win7win8 64位汇编开发环境合集安装与设置 下载 win7 win8  64位汇编开发环境.rar 下载地址(免积分下载) http://download.csdn.net/detail/liuchuang_mfc/9473974 打开DOSBox0.74-win32-installer.exe进行安装 将debug.exe,edit.com,link.exe,masm.exe这几个程序拷贝到d:\myassembly目录下就可以 找到你安装的路径目录下.以记事本打开文件:DOSBox…
win7下64位机安装SQLSERVER20001.右击计算机属性,查看操作系统 2.打开安装文件夹,按图点击 3.开始安装 4. 下一步选择 安装SQL Server2000 组件 5. 下一步 选择 安装数据库服务器 6. 下一步 跳出兼容性问题窗口提示,忽略之,选择 运行程序 7. 下一步 再次跳出兼容性问题 提示窗口,继续忽略之,选择 运行程序 8. 下一步继续安装,进入安装向导 选择 下一步 9. 选择 本地计算机 下一步 10.选择 创建新的SQL Server 实例,或按照客户端工…