现在基本上系统都是64位了,而64位系统下的汇编和32位有了较大的变化,无论是系统调用的接口还是C标准库的接口都和32位汇编有所不同;下面简单谈一下在64位linux下如何利用汇编直接调用系统调用。

需要准备的有:

1.一台linux机器:我的系统是ubuntu 14.10 x64版;

2.还要一个汇编器;我没有使用gas,而是使用了跨平台的nasm;

3.一个调试器;这里选择的不多,要不就是gdb,要不就是lldb,不过这里选择前者。

4.一个编辑器,linux下有很多优秀的语法编辑器,这里用的是sublime,不过可选的还有很多,比如geany,scite,atom等等,大家可以自便。

5.最好还要一个C的编译环境,这样方便参考;linux下可选的貌似也不少我常用的有code::blocks和codelite,这里选择后者:一方面其动态调试的汇编支持还不赖,另一方面其本身版本迭代比较快,至少比codeblocks要快得多。

6.还有神马!?如果可以搞到的话,ida pro也有linux版本哦!其静态调试的功能那是超级优秀啊!正版价高达几百美刀啊!不过网上可以觅到xx版本的,不过ida一贯的做法是将32和64位反汇编器分开啊,貌似64位的xx版逆向器比较难搞到。

下面讲一下linux汇编中基本的尝试新问题,首先linux下32位和64位的syscall table调用号是完全不同的,对于本猫的系统来说调用号文件可以用:

locate unistd_32
//或者
locate unistd_64

命令快速定位,如果系统曾安装过多个内核版本,则可能会找到多个文件,选择当前系统内核版本的就可以了。比如我的32位syscall table文件路径和前几个调用号如下:

head -n10 /usr/src/linux-headers-3.16.0-33-generic/arch/x86/include/generated/uapi/asm/unistd_32.h
#ifndef _ASM_X86_UNISTD_32_H
#define _ASM_X86_UNISTD_32_H 1

#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6

而对应的64位syscall内容如下:

head -n20 /usr/include/x86_64-linux-gnu/asm/unistd_64.h
#ifndef _ASM_X86_UNISTD_64_H
#define _ASM_X86_UNISTD_64_H 1

#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
#define __NR_close 3
#define __NR_stat 4
#define __NR_fstat 5
#define __NR_lstat 6
#define __NR_poll 7
#define __NR_lseek 8
#define __NR_mmap 9
#define __NR_mprotect 10
#define __NR_munmap 11
#define __NR_brk 12
#define __NR_rt_sigaction 13
#define __NR_rt_sigprocmask 14
#define __NR_rt_sigreturn 15
#define __NR_ioctl 16

注意32位中wrtie调用号是4,而64位下是1,这个千万别搞错了,否则自然一塌糊涂。

最新文章

  1. .NET破解之百度云盘分享工具(批量)
  2. 忘记mysql root密码的解决方法
  3. (原) 1.2 Zookeeper伪集群安装
  4. 十个提升你Emacs生产力的高招
  5. 【HDOJ】4363 Draw and paint
  6. Android 设置隐式意图
  7. form表单中的label标签
  8. VBS 批量修改多个文件夹下的文字命名
  9. Java数据类型在实际开发中的应用二枚举类型
  10. 201521123008《Java程序设计》第11周学习总结
  11. EntityFrameworkCore v1.1.1 问题汇总
  12. hdu1003 Max Sum---最大子段和+记录开始结束点
  13. [HNOI 2010]Bounce 弹飞绵羊
  14. go [第一篇]初识
  15. mysql+postgresql备份与恢复
  16. Java 11新功能抢先了解
  17. oracle ORA-01991错误--重建密码文件问题
  18. Java XML JSON 数据解析
  19. JAVA动态代理和方法拦截(使用CGLib实现AOP、方法拦截、委托)
  20. Java Servlet开发的轻量级MVC框架最佳实践

热门文章

  1. 最简单的基于DirectShow的示例:视频播放器图形界面版
  2. Collections类解析
  3. SpringMVC源码分析--容器初始化(三)HttpServletBean
  4. Latex 表格内文字过长自动换行
  5. iOS 解决键盘挡住输入框的问题
  6. String类用法总结
  7. 【自制插件】MMD4Maya
  8. 《java入门第一季》之UDP协议下的网络编程详解
  9. html倒计时代码
  10. JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder