摘要:
addr2line探秘在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的尸体,帮助程序员们解决了一个又一个问题。有时配置不给力,Linux直接毁尸灭迹,没有了Core文件;又有时,刚好磁盘空间不足,Core文件写不下了。没有Core文件的时候,如何知道程序在什么地方出错了呢?addr2line就在这时派上用场。这是一个示例程序,func函数返回参数a除以参数b的结果。这里使用0作为除数,结果就是程序因为除以0导致错误,直接中断了。 阅读全文
摘要:
PAGE_SIZE & PAGE_SHIFT & _AC()在大多系统下,PAGE_SIZE被定义为 4k 大小,即 4096 字节。在 x86 系统里,PAGE_SIZE 和 PAGE_SHIFT 都定义在 include/asm-x86/page.h 头文件中:/* PAGE_SHIFT determines the page size */#define PAGE_SHIFT 12#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)_AC 宏被定义在 /inux/const.h 中:引用#ifdef __ASSEMBLY__# 阅读全文
摘要:
Blue : User Space 128TBRed : Kernel Space 512MBThe rest of the address space goes to various parts of the system, along with a few unusable holes.-----------Virtual memory map with 4 level page tables:0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mmhole caused by [48:63] . 阅读全文
摘要:
This tutorial will outline the process to compile your own kernel for Ubuntu. It will demonstrate both the traditional process using ‘make’ and ‘make install’ as well as the Debian method, using ‘make-dpkg’. This is the detailed version of this tutorial, seeCompile Linux Kernel on Ubuntu 12.04 LTSfo 阅读全文
摘要:
1、CALL和RET/RETN是一对指令,CALL把返回地址压入堆栈,RET/RETN把返回地址从堆栈取出,然后将IP寄存器改为该返回地址。2、不使用CALL,而是人为地把地址放入堆栈即可实现。如:push ediretn从edi处开始执行3、加壳利用这个特点,在启动源文件文件前,将代码解密还原至原始位置 阅读全文
摘要:
LINUX中断描述符初始化@CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~Author:WenHui,WuHan University,2012-6-4硬件产生中断之后,需要通过门描述符来寻找中断的处理程序入口。门描述符和段描述符一样,8个字节。门描述符大体分为:段偏移、段选择子以及DPL。段选择子用于在GDT中寻找到门段基址,DPL用于控制当前进程中断或异常访问权限。当发生中断时,将门描述符所指向的段基地放入%cs,将段偏移放入%eip,转入相应服务。门描述符结构如下:任务门描述符:用于在发生中断时调度相应进程中断门描述符:描 阅读全文
摘要:
$cat /proc/cpuinfo查看flags 欄位中是否有 lm (long mode) 阅读全文
摘要:
Linux.中断处理.入口x86平台entry_32.SLinux.中断处理.入口x86平台entry_32.S在保护模式下处理器是通过中断号和IDTR找到中断处理程序的入口地址的。IDTR存的是一个32位的IDT起始地址和一个16位的IDT长度,理论上IDTR和GDTR一样都能支持8192个中断门(65536字节),但x86只能支持256个中断,所以实际上IDTR的最大有效限长只是2048字节。在这256个中断中,前0×20个中断号被处理器保留用作陷阱(Trap)、故障(Fault)和终止(Abort)。而第0×80号中断号则被Linux用来提供作为用户层程序陷入内核的系 阅读全文
摘要:
中断处理函数数组interrupt[]初始化2011-05-13 15:51:40分类:LINUX在系统初始化期间,trap_init()函数将对中断描述符表IDT进行第二次初始化(第一次只是建一张IDT表,让其指向ignore_intr函数),而在这次初始化期间,系统的0~19号中断(用于分NMI和异常的中断向量)均被设置好。与此同时,用于系统调用的0x80号向量也已被设置。然而,对于外部中断的初始化 却没有在这个函数中进行。而是在函数init_IRQ中。仔细想一想内核这样做,的确是使代码清晰又有条理。1)trap_init -----> 内部中断异常和NMI(中断向量号:0~19)2 阅读全文
摘要:
Linux汇编语法简介(GNU GAS)声明:本教程不是介绍汇编语言和CPU指令的书籍,只是对gas的用法做一简单介绍。市面上所有讲汇编的书都是在微软的环境下,使用的是Intel的语法格式,因此,本教程的目的是想给在Linux下学习汇编的初级用户提供一些帮助。(详细请参阅 GNU GAS 手册)本人也是初学者,在以后的不断学习中,此教程也会慢慢修改,使得更加完善,希望阅读者给予宝贵意见。谢谢!一、 通用语法指令格式: 操作码 源操作数, 目的操作数(在有两个操作数的情况下)。常量表示: 在常量前加上$,例:$1$的另一种用法:用于符号时,表示的是一个首地址。例:string:.ascii &q 阅读全文