
Linux编程相关
deviosyan
这个作者很懒,什么都没留下…
展开
-
C语言的反汇编代码
1. 最简单的代码://// test1.cint main(){ return 1;} 编译、反汇编:gcc test1.cgdb ./a.out(gdb) disass转载 2010-04-17 16:13:00 · 3659 阅读 · 0 评论 -
insight-6.8调试工具安装
错误信息:qiang@LinuxSir:~$ sudo arm-elf-insight Tk_Init failed: Can't find a usable tk.tcl in the following directories: /usr/local/share/tk8.4 /usr/local/lib/tk8.4 /usr/lib/tk8.4 /usr/l转载 2014-07-28 17:43:20 · 798 阅读 · 0 评论 -
linux内核态与用户态通信方式
下面对linux内核态与用户态通信方式中的procfs进行讲解。/proc主要存放内核的一些控制信息,所以这些信息大部分的逻辑位置位于内核控制的内存,在/proc下使用ls -l你会发现大部分的文件或者文件夹的大小都是0,不过使用cd命令进到文件夹下或者使用cat命令查看某些文件的内容确实能查看到一些信息。这是因为/proc文件系统和其他常规文件系统一下把自己注册到虚拟文件系统层(VFS)转载 2014-01-06 16:50:42 · 13238 阅读 · 0 评论 -
UNIX环境高级编程中的apue.h错误
最近在读 Richard Stevens 的大作《UNIX环境高级编程》,相信很多初读此书的人都会与我一样遇到这个问题,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个文件或目录”。apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编转载 2013-12-09 23:07:40 · 624 阅读 · 0 评论 -
RHEL5安装emacs
1、下载emacs包,从gun emacs下载即可;2、压缩emacs包,到你想要压缩的目录;3、进入压缩目录;./configure4、提示libgif/libungif找不到(这两个包装一个就行了);5、找到你的rhel5安装包,里面可以查找到libgif.rpm包6、rpm -ivh 安装即可;7、然后就make你的emacs吧,这就安装ok了;原创 2013-05-14 05:01:53 · 697 阅读 · 0 评论 -
AT&T汇编格式
AT&T的语法格式:1、寄存器的引用:引用寄存器要在寄存器前加%,如mov %eax,%ebx2、操作数的顺序:操作数排列时从源(左)到目的(右),如mov %eax(源),%ebx(目的)3、常数/立即数的格式a:使用立即数,要在数前面加$, mov $4, %ebx;把4赋值给ebxb:符号常量直接引用;入mov value,%ebx;把value所代表的值传递给e原创 2011-10-25 00:00:16 · 1293 阅读 · 1 评论 -
内存屏障(memory barrier)
<br /> 首先看看__set_current_state()和set_current_state()函数的区别<br />#define __set_current_state(state_value) /<br /> do { current->state = (state_value); } while (0)<br /> <br />#define set_current_state(state_value) /<br /> set_mb(current->state,转载 2010-08-30 21:14:00 · 775 阅读 · 0 评论 -
gcc内嵌汇编简介
<br />在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。 <br /><br />1、简单的内嵌汇编 <br />例: <br />__asm__ __volatile__("hlt");"__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volati转载 2010-06-02 22:11:00 · 380 阅读 · 0 评论 -
UNIX/LINUX 平台可执行文件格式分析
本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and linkeditor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format通用对象文件格式)、ELF(Executable and Linking Format可执行和链接格式)。首先是对可执行文件格式的一个综述,并通过描述 ELF转载 2010-05-13 15:55:00 · 483 阅读 · 0 评论 -
c中可变参数用法小记
#include#includeint N=5;void Stdarg(int a1,...){ va_list argp; int i; int ary[5]; va_start(argp,a1); ary[0]=a1; for(i=1;i ary[i]=va_arg(argp,int)转载 2010-05-13 22:25:00 · 1011 阅读 · 0 评论 -
网络字节序与主机字节序
不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序最常见的有两种1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址LE little-endian最符合人的思维的字节序地址低位存储值的低位地址高位存储值的高位怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说转载 2010-05-10 22:25:00 · 337 阅读 · 0 评论 -
sigint sigterm 的区别
SIGHUP 终止进程 终端线路挂断SIGINT 终止进程 中断进程SIGQUIT 建立CORE文件终止进程,并且生成core文件SIGILL 建立CORE文件 非法指令SIGTRAP 建立CORE文件 跟踪自陷SIGBUS 建立CORE文件 总线错误SIGSEGV 建立CORE文件转载 2010-05-10 16:25:00 · 1226 阅读 · 0 评论 -
unbuffered 文件I/O
unxi shell是文件描述符0,1,2分别与标出输入,标准输出,标准错误相结合。 在POSIX.1应用程序中,在头文件定义了STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO这3个常量来进行对应。 int open(const char *pathname,int oflag,....) ----出错为-1转载 2010-05-10 14:39:00 · 480 阅读 · 0 评论 -
编程的小细节
结构体字节对齐【例子】 结构体(struct)的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。先看下面定义的两个结构体.struct{ char a; short b; char c;}S1;struct{ char a; char b; short c;}S2;分别用程序测试转载 2010-05-10 08:37:00 · 563 阅读 · 0 评论 -
linux操作系统下c语言编程入门
(一)目录介绍1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具转载 2010-05-10 08:32:00 · 1516 阅读 · 0 评论 -
gcc and g++
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4.连接目标代码,生成可执行程序[链接器ld] [参数详解]转载 2010-05-07 08:34:00 · 455 阅读 · 0 评论 -
Linux NTP协议
网络时间协议(network time protocol,简称ntp)是用来在整个网络内发布精确时间的tcp/ip 协议,其本身的传输基于udp。其基本原理如下: 上图所示的是ntp 基本工作原理,路由器gwa 和gwb 通过网络相连,它们都有自己独立的系统时钟, 要实现各自系统时钟的自动同步,作如下假设:1 在gwa 和gwb 的系统时钟同步之前, gwa 的时钟设定为10:00:00am,gwb 的时钟设定为11:00:00am。2 以gwb 为ntp 时间服务器,即gwa 将使自己转载 2010-06-27 18:34:00 · 2243 阅读 · 1 评论 -
简单的时间片轮转多道程序内核代码
内核开始函数:void __init my_start_kernel(void){ int pid = 0; /* Initialize process 0*/ task[pid].pid = pid; task[pid].state = 0;/* -1 unrunnable, 0 runnable, >0 stopped */ // set task原创 2016-03-06 21:34:41 · 589 阅读 · 0 评论