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

来源:互联网 发布:易娱网络 编辑:程序博客网 时间:2024/06/04 19:15

看到这里大家都基本知道了如何进行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库中汇编指令,而我们一般没法找到这些源代码。
null

null

这里写图片描述

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

null

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

0 0
原创粉丝点击