
linux c
yldfree
有技术就是一切
展开
-
open的时候传递O_CREAT出现__open_missing_mode的原因
当你代码中使用open("das",O_CREAT)的时候,注意没有第三个参数。如果你用autoconf生成Makefile来编译的化会出现如下问题error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments __open_missing_mode ();当你直接用gcc test.c -o..原创 2020-07-01 19:56:26 · 5072 阅读 · 1 评论 -
linux设置某函数在main函数之前之后执行(通过对.ctors和.dtors节的设置)
第一种方法:#include <stdio.h>#include <stdlib.h>//此函数在main之前执行void before_main(void) __attribute__((constructor));//此函数在main之后执行void after_main(void) __attribute__((destructor));void before_main(void){ printf("start before main\n")原创 2020-05-09 12:52:46 · 710 阅读 · 0 评论 -
linux c在子函数中获得函数返回地址, 获得当前地址x86_64
#include <stdio.h>#include <stdlib.h>int fun(){ unsigned long ret_addr = 0; __asm__("push %%rax\n\t" "movq 8(%%rbp),%%rax\n\t" "movq %%rax,%0\n\t" ...原创 2020-01-16 09:35:35 · 727 阅读 · 0 评论 -
tcp,tcp syn,tcp fin,tcp null,icmp 扫描linux c代码实现
.c 文件#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h> #include <s...原创 2019-01-16 16:55:42 · 1232 阅读 · 0 评论 -
linux c将缓存字符串进行编码转换
#include <stdio.h>#include <stdlib.h>#include <iconv.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <i...原创 2019-03-29 16:39:07 · 364 阅读 · 0 评论 -
同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
转自https://www.cnblogs.com/euphie/p/6376508.htmlPOSIX同步IO、异步IO、阻塞IO、非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下。POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是...转载 2019-04-10 15:17:11 · 129 阅读 · 0 评论 -
c语言实现定时器时间轮
本代码是在根据内核中的时间轮代码进行改造 适用于应用层,若发现问题 欢迎指正/* *毫秒定时器 采用多级时间轮方式 借鉴linux内核中的实现 *支持的范围为1 ~ 2^32 毫秒(大约有49天) *若设置的定时器超过最大值 则按最大值设置定时器 **/#include <stdio.h>#include <stdlib.h>#include &l...原创 2019-05-14 09:56:03 · 5565 阅读 · 4 评论 -
如何让linux下的动态库so能执行(节.interp的使用)
感觉对自己有用 给点个赞哈代码如下mytest.c#include<stdio.h>#include<stdlib.h>//在elf格式中加入一个节.interp 此节含有 ELF 程序解析器的路径名//如果动态库不包括此节就不能被执行//注意你的连接器地址不一定是/lib64/ld-linux-x86-64.so.2这个路径哈 自己查找下你环境中...原创 2019-07-09 14:39:15 · 895 阅读 · 0 评论 -
uevent的基本使用1
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/stat.h>#include <linux/netlink.h>#include <sys/types.h>...原创 2019-10-08 12:28:23 · 360 阅读 · 0 评论 -
linux c编程实现vsftpd是否支持匿名账户
#include <stdio.h>#include <stdlib.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <sys/socket.h>#include <netinet/in.h>#inc...原创 2019-01-21 18:33:37 · 153 阅读 · 0 评论 -
linux tcp socket编程初级
服务端:#include <stdio.h>#include <stdlib.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <arpa/inet.h>in...原创 2018-11-13 10:01:25 · 1677 阅读 · 0 评论 -
linux c 获取本机ip地址
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#include <net/if.h>#include &原创 2018-11-07 16:10:44 · 5021 阅读 · 0 评论 -
命令行长选项getopt_long
int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);funcion:对长或短命令行参数...原创 2018-07-19 11:36:22 · 1882 阅读 · 0 评论 -
对elf进行解析
elf.c/************************************** *Copyright yldfree *2017-10-5 * ************************************/#include <stdio.h>#include <stdlib.h>#include <elf.h>#in...原创 2018-07-25 19:52:39 · 1890 阅读 · 0 评论 -
测试64位机器参数的传递
在64位机器上参数的传递前6个 从左向右分别保存在rdi,rsi,rdx,rcx,r8和r9中,但是从第七个开始就要从又向左的入栈,如下图在下面的例子中用嵌入式汇编的方式验证这正传参方式,前6个确实保存在rdi,rsi,rdx,rcx,r8和r9中如下输出结果:但是64位架构中寄存器还存在很多如下:那么第七个参数会不会在r10或之后的寄存器中保存呢,通过将第65行注释取消,...原创 2018-07-26 19:56:30 · 3771 阅读 · 0 评论 -
64位机器使用嵌入式汇编自己实现open系统调用
#include <stdio.h>#include <stdlib.h>#include <asm/unistd.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int原创 2018-07-26 20:32:52 · 2257 阅读 · 0 评论 -
64位机器使用嵌入式汇编自己实现mmap系统调用
环境: Centos(6.5 64位) gcc 4.4.7 20120313 内核 2.6.32-431.el6.x86_64 对于mmap的系统调用参数传递,参数传递对应的寄存器如下:void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);addr: %rdilength: %rs...原创 2018-07-27 10:20:30 · 2226 阅读 · 0 评论 -
使用嵌入式汇编实现64位linux上文件的基本操作
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <asm/unistd.h>#include <stdio.h>//打开文件int my_open(const char *pathname,int flags,mode_t mode...原创 2018-08-07 14:25:56 · 1747 阅读 · 0 评论 -
libnl的基本使用(根据通用netlink family name获得通用netlink family id)
(1)libnl下载地址http://www.infradead.org/~tgr/libnl/(2)将下载的代码进行编译后,在.lib/.libs下生成如下的静态库 libnl-3.a libnl-genl-3.a libnl-idiag-3.a libnl-nf-3.a libnl-route-3.a libnl-xfrm-3.a(3)新建测试文件te.c代码如下:#...原创 2018-09-10 18:23:03 · 5695 阅读 · 0 评论 -
ICMP->linux c PING功能实现
报文格式:\代码#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/ip_icmp.h> //struct icmp#include <netinet/in.h&...原创 2018-09-14 11:57:21 · 3359 阅读 · 0 评论 -
ICMP->linux c 时间戳请求功能实现
报文格式:代码实现:#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/ip_icmp.h> //struct icmp#include <netinet/in....原创 2018-09-14 15:01:21 · 2534 阅读 · 0 评论 -
发送arp请求报文
(1)报文格式(2)代码如下: #include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#incl...原创 2018-10-19 13:43:59 · 9884 阅读 · 1 评论 -
命令行短选项getopt
int getopt(int argc, char * const argv[],const char *optstring);funcion:对命令行参数进行解析 选项需要用'-'来标记argc: 传给main函数的参数个数argv[]:传给main函数的参数optstring:一个包含合法字符选项的字符串 用于解析 如: "ab:c::" (1) -a 选项不带参数 (...原创 2018-07-19 11:30:00 · 1286 阅读 · 0 评论