码迷,mamicode.com
首页 > 系统相关 > 详细

linux下64位汇编的系统调用(5)

时间:2015-04-12 10:37:45      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:nasm   linux   汇编   codeblocks   codelite   

看到这里大家都基本知道了如何进行linux下的汇编系统调用;不过有些童鞋可能会问:那些C库中函数里为我们解决的额外汇编代码你是怎么知道的?
好吧,我承认:我是通过逆向知道的,这貌似有点犯规的嫌疑…
比如举个例子,那上一篇里的mmap C库函数来说,首先写一个C代码:

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <math.h>
#include <unistd.h>

int main(void){
    int size = 4096;
    printf("anonymous is %08x\n",MAP_ANONYMOUS);
    printf("err test is %s\n",strerror(22));
    //in linux with -D_BSD_SOURCE
    char *buf = mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_ANONYMOUS,-1,0);
    printf("buf is %p\n",buf);
    if(buf == MAP_FAILED){
    //if(buf < 0){
        printf("mmap failed(%s)\n",strerror(errno));
        return 1;
    }
    return 0;
}

前面介绍过几个linux下的集成调试环境,这里我们还是用codelite而不用codeblocks,原因很简单,后者需要C库函数的源代码才能在调试中查看C库中汇编指令,而我们一般没法找到这些源代码。
技术分享

技术分享

技术分享

不过codeblocks里面可以设置汇编的语法,比如可以设置为intel类型:

技术分享

而codelite貌似没找到设置的地方,只有用大脑在at&t和intel之间转换鸟。

linux下64位汇编的系统调用(5)

标签:nasm   linux   汇编   codeblocks   codelite   

原文地址:http://blog.csdn.net/mydo/article/details/45008111

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!