一、入口函数和程序初始化。
1、程序从main开始吗:显然不是,之前已经知道有动态链接器了。从入口函数开始。
2、入口函数如何实现:ebp清零(表示最外层函数)、参数和环境变量入栈。
3、运行库与I/O:I/O指代所有操作系统理解为“文件”的事务。
4、MSVC CRT的入口函数初始化:堆初始化、I/O初始化。
二、C/C++运行库
1、C语言运行库:入口函数及其依赖的函数包括各种标准的库函数。
2、C语言标准库:数学函数、字符/字符串函数、I/O基本操作等。特殊函数:变长参数、非局部跳转。
3、glibc与MSVC CRT

- 阅读剩余部分 -

一、程序的内存和布局
1、栈:用于维护函数调用的上下文。
2、堆:程序在运行时动态分配的区域。
3、可执行文件映像。
4、保留区:比如地址0
二、栈与调用惯例
1、什么是栈:后进先出的队列,包括函数的返回地址和参数、临时变量、寄存器的上下文。
2、调用惯例:函数调用方和被调用方之间的约定,包括:参数传递方式、栈维护方式、名字修饰策略。
3、函数返回值传递:一般是eax,5~8字节用eax和edx,超过8字节用栈上开对象用eax指向其地址的方式。

- 阅读剩余部分 -

一、DLL简介
1、进程和地址空间管理:32位Windows之前,是共享数据空间(包括数据空间),32位Windows开始,各自独立的空间。
2、基地址和RVA:基地址是装载时的起始地址,RVA是相对于起始地址的偏移。
3、DLL共享数据段:DLL可以设置某些数据共享,即同时存在共享数据和私有数据。
4、DLL的简单例子:导出指定的某些符号,使用时导入。有别于ELF中的全导出。
5、创建DLL:cl /LDd **.c,生成四个文件,**.dll,**.obj,**.exp,**.lib
6、使用DLL:把编译后的目标文件与**.lib链接。**.lib中是导出符号。
7、使用模块定义文件:.def文件。
8、DLL显式运行时链接:跟ELF类似。LoadLibrary、GetProcAddress、FreeLibrary。
二、符号导出导入表
1、导出表:PE文件提供出来给别的程序使用的符号表,为省内存使用序号机制,ELF中也有类似用法。
2、Exp文件:链接器在第一遍扫描后生成的导出表临时文件,用于链接器在第二遍时的链接。
3、导出重定向:某dll文件的导出符号表直接指向另一个dll文件。寻址的时候,直接跳过去,所以不是委托。
4、导入表:对所调用的DLL的引用信息。也有神奇的延迟载入。delay load。
5、导入函数的调用:PE的DLL不是地址无关的,它用了rebasing的方法。没有全局符号介入问题。

- 阅读剩余部分 -

概要
一、共享库版本
1、共享库兼容性:接口签名不变。
2、共享库版本命名:libname.so.x.y.z,主版本、次版本、发布版本。
3、SO-NAME:只有主版本号库名的软链。解决依赖及升级问题。同名SO-NAME必须保持兼容性。
二、符号版本
1、基于符号的版本机制:符号表中加次版本号。
2、Solaris中的符号版本机制:VERS_1.2
3、Linux中的符号版本:GLIBC_2.0 GLIBC_2.1.2
三、共享库系统路径
1、/lib:系统最关键和基础的共享库。
2、/usr/lib:开发时共享库。非一。
3、/usr/local/lib:第三方库。

- 阅读剩余部分 -

收到警报,统计的从库不同步。
上去看了一下MySQL执行的进程情况。
[code]
mysql> show processlist\G
...
*************************** 3. row ***************************
Id: 7
User: xxolap
Host: 127.0.0.1:40367
db: xxdb
Command: Killed
Time: 53479
State: query end
Info: delete from xxdb.table_big where
send_time < (unix_timestamp('2014-7-14')-3600*24*7)*1000
[/code]
发现有一个对大表的删除数据操作,被kill,这个操作执行了53479秒,已经十多个小时了。

- 阅读剩余部分 -

概要
1、动态链接起因:与静态链接的区别及好处:省磁盘,省内存,省cpu,独立更新。缺点:。。。
2、一个例子:多出来的文件映射,装载地址0。
3、地址无关代码:
1)固定装载地址。
2)装载时重定位。
3)地址无关代码,四种寻址模式:
1)内部函数:相对寻址。
2)内部数据:相对寻址。
3)外部数据:全局偏移表(指向变量的指针数组)。
4)外部调用:全局偏移表(目标函数地址),有优化空间。
4)共享模块的全局变量:GOT。
5)数据段地址无关性:重定位表。

- 阅读剩余部分 -