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

知道了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…
http://blog.csdn.net/mydo/article/category/3084893…
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 实例,或按照客户端工…
本文主要记录在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…
由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&T格式,两者在语法格式上有着很大的不同,其实完全可以使用原来汇编的思路解决问题,只要掌握下面两者的不同: 一.在AT&T汇编格式中,寄存器名要加上' %'作为前缀:而在Intel汇编格式中,寄存器名不需要加前缀.例如: AT&T格式 Intel格式 pushl %eax push eax…
转自: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…
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. 首先…
折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别  在自己的新程序中打算全面应用memcached技术,这个很容易理解这是memcached是内存缓存,但是怎么还有memcache呢?  其实很简单,memcache是php的一个扩展,用于php管理memcached,php-memcache.dll.  如果安装了memcached不安装扩展,那么php无法操控memcached,但是命令行使…
折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别  在自己的新程序中打算全面应用memcached技术,这个很容易理解这是memcached是内存缓存,但是怎么还有memcache呢?  其实很简单,memcache是php的一个扩展,用于php管理memcached,php-memcache.dll.  如果安装了memcached不安装扩展,那么php无法操控memcached,但是命令行使…
查看当前工作平台: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…
软件下载 目前,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位:…
开通博客已久,想了好久决定写个基础的安装教程,望后人少走弯路,也借此希望跟大家多多交流.文中给出的链接默认是基于对python2.7的前提下的包. 1.首先下载64位Python包,进行安装(默认python2.7.6) 下载链接:https://www.baidu.com/link?url=i1EA542Pi-dNF0hi9veKLT6dDlsur0X0n3H81kEOUxwwlnbNvyRiwu8jP_E9Bwi5AjuqDK1isRmuYd9H3SdecbdIOnQiTwAv6t8uTUQ…
masm6或者masm5 下载. dosbox 下载安装 为何要用这个呢,因为 机子是64位的,dosbox 模拟32位的用来执行生成的exe文件 masm 安装好后,有个bin文件:个人建议将其设置环境变量.那么命令 ml masm link 这三个命令就随时可用了,免得到处复制 编写asm文件,使用ml命令一步到位生成exe 或者masm命令生成obj再用link命令生成exe  注意这三个命令是在win1064位自带的cmd上运行的 生成的exe文件怎么执行呢?显然在win10 64位下,…
首先下载mysql 地址:https://dev.mysql.com/downloads/mysql/ 下载社区版mysql 下载完成后:ftp上传到服务器 /user/local/目录下,这个自己定! 使用命令 ,对mysql进行解压缩 [root@instance_4dbde0 local]# tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 使用命令,对mysqll文件夹进行重命名 [root@instance_4dbde0 loca…
配置MPI经历了不少波折,把这些经历记录下来,告诫后来人. 1.版本要对 下载MPI,去官方网站 http://www.mpich.org/downloads/ 选择x86-64版本 2.步骤要对 1)点击mpich2-1.4.1p1-win-x86-64.msi运行 2)一直next下去,当选择安装目录的时候根据自己的需要选择即可,这里选择D:\Program Files\MPICH2 3)安装完成后,先在本计算机上,控制面板下创建一个新用户(一定是管理员身份),用户名自己取(如:MPI).…
最近阿里云服务器到期,这个周末连夜将服务器迁移到美国去了,为什么迁移到美国去呢?主要是因为阿里云服务器费用高,另外网站的访问量不大,对网速要求也不高,主要是宣传和信息传递的作用,加上本人之前在***上租了vps,安装shadowsocks 跳墙用,所以想索性将服务器暂时放到国外算了,一举两用,也不用买别人的vpn代理用来跳墙了. 整个迁移过程和软件安装步骤如下: 首先在vps上安装了nginx,保证国内能访问,并且网速能接受nginx安装,之前在博客上写过部署,不过这个刚好借此机会汇总下: 1.…
以安装在/usr/local目录下为例 1.下载安装包地址:https://dev.mysql.com/downloads/file/?id=476936,安装包保存到/usr/local 2.解压: cd /usr/local tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar mv mysql-5.7.22-linux-glibc2.12-x86_64 mysql-5.7.22 ln -s mysql-5.7.22 mysql 3.添加用户组和…
原因: 1.系统在创建时,没有安装图形化 2.系统在安装后,有降低内存的操作,内存过低无法启动桌面,以及其他 就原因一进行图形化安装: 1.VMware挂载Red Hat Enterprise Linux 7镜像文件 一定选择第一个cd/dvd 2.查看设备情况 3.挂载ISO镜像 mkdir /mnt/cdrom                           建立一个挂载文件夹 mount /dev/cdrom /mnt/cdrom       将ISO所在的/dev/cdrom里面的文…
查看redhat原有的yum包有哪些: [root@localhost ~]# rpm -qa|grep yum yum-utils-1.1.31-24.el7.noarch yum-langpacks-0.4.2-3.el7.noarch yum-metadata-parser-1.1.4-10.el7.x86_64 yum-rhn-plugin-2.0.1-4.el7.noarch PackageKit-yum-0.8.9-11.el7.x86_64 yum-3.4.3-118.el7.no…
安装RHEL7.2 步骤: 1.安装虚拟机,按以下截图安装即可  步骤2: Ret hat 7.2 操作系统安装 rhel7因为许可报错解决…
URL:https://www.cnblogs.com/count-mjb/p/7655592.html wssbht = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 70.12.101.142)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )…
安装环境:系统是 centos6.5 1.下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6.33,通用版,linux下64位 也可以直接复制64位的下载地址,通过命令下载:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz 2.解压 #解压 tar -zxvf…
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry 选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义’QT_MODBUS()’和’QT_MODBUS_LOW()’ qt_static_plugin_AssimpParserPlugin未定义 在Qt Creator…