- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 dpkg查看软件包和共享库信息
0x01 查看.so文件是由哪个软件包提供的dpkg -S /usr/lib/libz.so输出如下:zlib1g-dev: /usr/lib/libz.so0x02 查看软件包的详细信息apt-cache show zlib1g-dev输出如下:Description: compression library - development zlib is a library implementing
2016-03-18 19:50:54
2254
原创 可装载内核模块-Loadable Kernel Module (LKM)
0x01 可装载模块分类设备驱动 文件系统 系统调用0x02 版本检查Linux 的迅速发展致使相邻版本的内核之间亦存在较大的差异,即在版本补丁号(Patch Level,即内核版本号的第四位数)相邻的内核之间。为此 Linux 的开发者为了保证内核的稳定,Linux 在加载模块到内核时对模块采用了版本校验机制。1,Invalid module format -> disagrees about
2016-03-15 19:51:10
1690
原创 聚内核与微内核
0x01 聚内核聚内核被实现为运行在单一的地址空间里的单一的进程。因此,这种内核通常以一个静态的二进制文件保存在磁盘中。所以内核的服务都存在并执行于一个大的内核地址空间里。在内核的内部进行通信显得直接了当,因为所有运行在内核态的代码都在相同的地址空间里:内核可以直接调用函数,就像用户空间的应用程序一样。这个模型的支持者们以聚内核的简洁和性能为理由。多大数Unix系统都采用聚内核的设计方法。0x02
2016-03-15 19:42:52
526
原创 查看运行中Linux的内核配置选项
0x01 查看内核配置选项zcat /proc/config.gz 需要开启内核配置项CONFIG_IKCONFIG才会生成这个文件
2016-03-15 19:41:33
2649
原创 软件hack方法(Ollydbg)
1,JE/JNE改为JMP 2,填充NOP 3,改为RETN 4 (4为入参的字节数,为了恢复堆栈,VB中应该是stdcall才会这样) 4,注意修改EAX,是存放函数返回值的地方 5,注意修改ESP,恢复堆栈(stdcall) 6,查找MessageBox调用(inter module calls) 7,查找String调用(All reference strings)
2016-03-14 20:15:55
368
原创 动态链接
0x01 全局偏移表GOTGOT(Global Offset Table) .got位于数据段中,内容是指向全局变量的指针数组0x02 延迟绑定PLTPLT(Procedure Linkage Table) .got.plt位于数据段中,保存函数引用的地址 所有对于外部函数的引用全部被分离出来放到了.got.plt中 .got.plt的前3项具有特殊意义:
2016-03-14 20:00:09
258
原创 可执行文件中和动态链接有关的段section
0x01 .interp内容是一个字符串,保存了动态链接器的路径,如/lib/ld-linux.so.2 有几种查看方式: objdump -s a.out readelf -l a.out | grep interpreter0x02 .dynamic保存了动态链接器所需的基本信息,具体可以看elf.h文件或LSB手册: 依赖于哪些共享对象
2016-03-14 19:58:05
447
原创 CRT (C RunTime)执行流程
1、初始化和OS版本有关的全局变量 2、初始化堆 3、初始化IO 4、获取命令行参数和环境变量 5、初始化C库的一些数据 6、调用main并记录返回值 7、检查错误并将main的返回值返回另外,还需要支持调试功能
2016-03-14 19:49:47
647
原创 两个特殊的段.init和.finit
.init中的代码在main之前执行 .finit中的代码在main之后执行为了支持C++的全局/静态对象的构造和析构其具体实现和crti.o、crtn.o有关gcc的参数-nostartfile和-nostdlib可以取消链接默认的启动文件和C运行库可以使用attribute((section(“.init”)))来将函数放到.init段中,但是普通函数放在.init中会破坏它的结构,因为函数的
2016-03-14 19:49:04
1274
原创 TLS线程局部存储
0x01 TLS (Thread Local Storage)为线程单独提供的私有空间 0x02 gcc中的隐式TLS用法隐式TLS __thread int number;显式TLS pthread_key_create pthread_getspecific pthread_setspecific pthread_key_delete0x03
2016-03-13 13:21:44
511
原创 FILE的缓冲模式
0x01 关于这个问题三种缓冲模式: 无缓冲,如stdout 行缓冲,如stderr 全缓冲0x02 文件描述符0,stdin1,stdout2,stderr0x03 缓冲的设置0x04 代码实现stdout重定向到文件 函数dup2,用于复制文件句柄 dup2(int oldhandle, int newhandle);函数f
2016-03-13 13:10:00
303
原创 共享库查找顺序
共享库查找顺序今天开始尝试用Markdown导入一下我在有道云笔记的学习笔记,这是第一篇0x00以下内容的标题序号为查找顺序0x01 环境变量LD_PRELOAD这个不是共享库的路径,而是指定的共享库文件,会最先被装载(无论程序是否依赖他们),由于全局符号介入这个机制,这些库中符号可能会覆盖用户代码或标准C库中的同名全局符号(变量或函数)0x02 环境变量LD_LIBRARY_PATH由冒号隔开的共
2016-03-13 13:00:41
288
原创 汇编+C点亮led-用uboot的go命令运行
main.c#include "led.h"static void delay(){ unsigned int i = 0; for(i = 0; i < 0xffffff; i++);}int main(){ led_init(); while(1) { led1_on(); delay(); led1_of
2015-08-26 20:30:43
966
原创 汇编+C点亮led-以替代uboot的方式执行
main.c#include "led.h"static void delay(){ unsigned int i = 0; for(i = 0; i 50000; i++);}int main(){ led_init(); while(1) { led1_on(); delay();
2015-08-25 21:03:59
465
原创 纯汇编点亮led-以替代uboot的方式执行
led.S#define GPIO_BASE 0x01C20800#define GPIO_PH_CFG2_BASE (GPIO_BASE + 0x104)#define GPIO_PH_DAT_BASE (GPIO_BASE + 0x10C).global _start_start: b resetreset: ldr r0, =GP
2015-08-25 20:49:12
480
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人