首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
Linux下64位汇编
2024-11-07
linux下64位汇编的系统调用(1)
现在基本上系统都是64位了,而64位系统下的汇编和32位有了较大的变化,无论是系统调用的接口还是C标准库的接口都和32位汇编有所不同:下面简单谈一下在64位linux下如何利用汇编直接调用系统调用. 需要准备的有: 1.一台linux机器:我的系统是ubuntu 14.10 x64版: 2.还要一个汇编器:我没有使用gas,而是使用了跨平台的nasm: 3.一个调试器:这里选择的不多,要不就是gdb,要不就是lldb,不过这里选择前者. 4.一个编辑器,linux下有很多优秀的语法编辑器,这里用
linux下64位汇编的系统调用(2)
知道了syscall调用号之后还不算完,还要搞清楚2件事: 1 每种调用号需要传递哪些参数: 2 调用如何传递参数以及结果如何返回: 第一个问题的答案是: 在linux系统中某个程序执行时进行的系统调用可以通过strace命令来查看,solaris中对应的命令为dtrace,而mac os x中可以通过类似的dtruss命令来查看.当进程已经处于 D 状态(uninterruptible sleep)时,strace 也帮不上忙.这时候可以通过: cat /proc/<PID>/syscall
linux下64位汇编的系统调用(3)
背景知识基本交代清楚了,下面我们实际写一个小例子看一下.代码的功能很简单,显示一行文本,然后退出.我们使用了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表示程序执行成功. 因为以上两个调用最多的也只
Mac OS X下64位汇编与Linux下64位汇编的一些不同
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符号名前要加
linux下64位汇编的系统调用(5)
看到这里大家都基本知道了如何进行linux下的汇编系统调用:不过有些童鞋可能会问:那些C库中函数里为我们解决的额外汇编代码你是怎么知道的? 好吧,我承认:我是通过逆向知道的,这貌似有点犯规的嫌疑- 比如举个例子,那上一篇里的mmap C库函数来说,首先写一个C代码: #include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include <sys/mman.h> #include <sy
linux下64位汇编的系统调用(4)
经过上一篇的铺垫貌似可以很轻松的用汇编写出mmap的代码来,可仔细一看,还是有不少问题需要解决: 1.系统调用mmap如果出错并不直接返回MAP_FAILED(-1),而是一个"类似"值:C库中的mmap函数对其做了包装,使其最终返回-1:如果我们直接调用mmap syscall,则这些事必须自己来做. 2.C库函数如果出错会设置errno的值,而在汇编中没法直接用: extern errno 的方法使用外部的值,连接时会报错: /usr/bin/ld: errno: TLS defi
linux下64位汇编的系统调用系列
http://blog.csdn.net/mydo/article/category/3084893
linux下32位汇编调用规则
传递给系统调用的参数必须安装参数顺序一次放到寄存器中,当系统调用完成后,返回值放在eax中: 当系统调用参数<=5个时: eax中存放系统调用的功能号,传递给系统调用的参数顺序依次放到寄存器:ebx,ecx,edx,esi,edi中 当系统调用参数>5个时: eax中存放系统调用的功能号,全部参数应依次放在一块连续的内存区域中,同时在寄存器ebx中保存指向该内存区域的指针(内存块的首地址):linux采用的是C调用模式,这意味着如果要以stack来实现这个连续的内存块(当然可以用其他方式实现,
win7win8 64位汇编开发环境合集安装与设置
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位机安装SQL2000
win7下64位机安装SQLSERVER20001.右击计算机属性,查看操作系统 2.打开安装文件夹,按图点击 3.开始安装 4. 下一步选择 安装SQL Server2000 组件 5. 下一步 选择 安装数据库服务器 6. 下一步 跳出兼容性问题窗口提示,忽略之,选择 运行程序 7. 下一步 再次跳出兼容性问题 提示窗口,继续忽略之,选择 运行程序 8. 下一步继续安装,进入安装向导 选择 下一步 9. 选择 本地计算机 下一步 10.选择 创建新的SQL Server 实例,或按照客户端工
【FFmpeg】Windows下64位ffmpeg编译
本文主要记录在64位Windows 7下,编译64位ffmpeg的过程. 1.资源准备 (1). MSYS http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/ (2). MinGW-w64 http://www.drangon.org/mingw/ (3). SDL http://www.libsdl.org/download-1.2.php (4). x264 http://www.videol
Windows下64位Apache服务器的安装
转自:http://www.blogjava.net/greatyuqing/archive/2013/02/13/395308.html 首先需要说明的是,Apaceh服务器没有官方的64位版本,只有民间的高手自己制作的.下面是具体的安装步骤. 在https://blackdot.be/download-archive/ 下载64位的Apache服务器.目前的版本是2.2.19,下载之后的压缩包名为httpd-2.2.19-win64.rar: 将该包解压至一个目录,如我的目录为E:\Apac
cmake编译win下64位obs
obs是一款开源编码推流工具,简单易用,非常流行.一次项目中,发现本台式机I3处理器下32位obs推流CPU使用率100%.而使用的第三方设备在64位下,性能较好.所以需要编译64位obs并且编译相应的64位插件. 根据官方说明文档,编译64位obs.参考文档:https://github.com/jp9000/obs-studio/wiki/Install-Instructions说明一下本机软件环境:vs2013 update5.qt5.4.1_64位.win版本cmake64位.1. 首先
win7下64位系统memcache/memcached安装教程
折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别 在自己的新程序中打算全面应用memcached技术,这个很容易理解这是memcached是内存缓存,但是怎么还有memcache呢? 其实很简单,memcache是php的一个扩展,用于php管理memcached,php-memcache.dll. 如果安装了memcached不安装扩展,那么php无法操控memcached,但是命令行使
wamp在win7下64位系统memcache/memcached安装教程
折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别 在自己的新程序中打算全面应用memcached技术,这个很容易理解这是memcached是内存缓存,但是怎么还有memcache呢? 其实很简单,memcache是php的一个扩展,用于php管理memcached,php-memcache.dll. 如果安装了memcached不安装扩展,那么php无法操控memcached,但是命令行使
anaconda3下64位python和32位python共存
查看当前工作平台:conda info 切换64位和32位: set CONDA_FORCE_32BIT=1是切换到32位 set CONDA_FORCE_32BIT= 是切换到64位 注意=号前后不能有空格 安装需要在prompt下进行,无论你是否在Prompt里设置了32位的环境,用Navigator安装的python都是64位的. 安装python:conda create -n python32 python=3.7 切换环境:conda activate python32,conda
Windows下64位Apache+PHP+MySQL配置
软件下载 目前,Apache和PHP均未出现官方的64位版本. Apache 64位: http://files.cnblogs.com/liangjie/httpd-2.2.19-win64.rar PHP 64位: http://files.cnblogs.com/liangjie/php-5.2.5(x64)-part1.rar http://files.cnblogs.com/liangjie/php-5.2.5(x64)-part2.rar 注:两个文件夹合并即可 MySQL 64位:
windows下64位python的安装及机器学习相关包的安装(实用)
开通博客已久,想了好久决定写个基础的安装教程,望后人少走弯路,也借此希望跟大家多多交流.文中给出的链接默认是基于对python2.7的前提下的包. 1.首先下载64位Python包,进行安装(默认python2.7.6) 下载链接:https://www.baidu.com/link?url=i1EA542Pi-dNF0hi9veKLT6dDlsur0X0n3H81kEOUxwwlnbNvyRiwu8jP_E9Bwi5AjuqDK1isRmuYd9H3SdecbdIOnQiTwAv6t8uTUQ
Linux下AT&T汇编语法格式与Intel汇编语法格式异同
由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&T格式,两者在语法格式上有着很大的不同,其实完全可以使用原来汇编的思路解决问题,只要掌握下面两者的不同: 一.在AT&T汇编格式中,寄存器名要加上' %'作为前缀:而在Intel汇编格式中,寄存器名不需要加前缀.例如: AT&T格式 Intel格式 pushl %eax push eax
win10 64位 汇编环境
masm6或者masm5 下载. dosbox 下载安装 为何要用这个呢,因为 机子是64位的,dosbox 模拟32位的用来执行生成的exe文件 masm 安装好后,有个bin文件:个人建议将其设置环境变量.那么命令 ml masm link 这三个命令就随时可用了,免得到处复制 编写asm文件,使用ml命令一步到位生成exe 或者masm命令生成obj再用link命令生成exe 注意这三个命令是在win1064位自带的cmd上运行的 生成的exe文件怎么执行呢?显然在win10 64位下,
热门专题
springboot filter 拒绝
websocket走服务总线可以吗
浏览器调试cookie怎么看
Visual Studio Code配置go开发环境
命令行打开 jupyter notebook
vs2019没有.net core 6.0目标框架如何解决
f_open c语言
liunx redis.conf 在哪里
在webstorm终端输入了命令没反应、
vue前端post请求中文乱码
e.printStackTrace();会继续抛异常吗
asp.net将所有控件恢复初始设置
小程序login openid后台
sas中retain用法
c memset 崩溃
安卓 tbs播放视频
Gson 复杂json对象
虚拟机双网卡每次启动网卡名称呼唤
android 自定义action
怎么理解random和string模块