上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 24 下一页
摘要: 直接将一个pe文件读到内存中是无法运行的,必须经过拉伸,然后再做其它处理才能可运行; 文件中的pe文件状态为文件映像; 拉伸后的状态为内存映像; 1.pe加载过程 1)根据SizeOfImage的大小,开辟一块缓冲区(ImageBuffer). SizeOfImage是可选pe头中的一个属性; 2) 阅读全文
posted @ 2019-10-17 16:27 L丶银甲闪闪 阅读(1091) 评论(0) 推荐(0) 编辑
摘要: 1.联合体 有如下的需求: 我们想存储一个人的学号和身份证号,而且只要存储一个就可以了. 学号需要一个字节 身份证需要四个字节 如果设计成: struct Student { char 学号; int 身份证号; } 因为每次最多用一个成员,那另一个成员的空间永远是浪费的. 关于联合类型: unio 阅读全文
posted @ 2019-10-16 09:57 L丶银甲闪闪 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 1.dos头 结构: struct _IMAGE_DOS_HEADER { WORD e_magic; WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; 阅读全文
posted @ 2019-10-15 16:04 L丶银甲闪闪 阅读(423) 评论(0) 推荐(0) 编辑
摘要: 每一种操作系统它最重要的格式就是它的可执行文件格式, 因为操作系统就是为了支持这些文件而生成的,内核里面有很多机制,也是配合这种文件格式设计的。 换句话说,这种文件格式也是适合操作系统设计的。 比如: PE 它是 windows 下的文件格式,是 MZ 打头的(4D5A)只有两个字节,后面很大一片就 阅读全文
posted @ 2019-10-14 18:54 L丶银甲闪闪 阅读(419) 评论(0) 推荐(0) 编辑
摘要: (一)基本概念 PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等, 事实上,一个文件是否是PE文件与其扩展名无关,PE文件可以是任何扩展名。 那Windows是怎么区分可执行文件和非可执行文件的呢? 我们调用LoadLibrar 阅读全文
posted @ 2019-10-14 18:53 L丶银甲闪闪 阅读(539) 评论(0) 推荐(0) 编辑
摘要: 代码想转换成.exe文件,需要经过几个步骤: 替换 ->为了可读性或方便,使用了一些宏定义;在编译前,会有一个工具将宏定义的符号替换成相应的值; 编译 ->将代码转成二进制文件; 连接 ->代码中可能用到了别人写的程序,连接就是将别人的程序复制一份放到自己的程序中; 1.宏定义 1)无参数的宏定义 阅读全文
posted @ 2019-10-14 18:52 L丶银甲闪闪 阅读(2092) 评论(0) 推荐(0) 编辑
摘要: 1.算术移位指令 指令格式:SAL/SAR Reg/Mem, CL/Imm 左边的操作数可以使寄存器或内存,右边的操作数可以是寄存器cl或立即数 SAL(Shift Arithmetic Left): 算术左移 SAR(Shift Arithmetic Right): 算术右移 1)算术左移 左移一 阅读全文
posted @ 2019-10-14 18:51 L丶银甲闪闪 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 1.多维数组指针 1)用一维数组指针访问一维数组 代码: void fun(){ int arr[5] = {1,2,3,4,5}; int (*p)[5] = &arr; printf("%d\n", *(*(p) + 2)); //结果是3 int (*px)[2] = (int (*)[2]) 阅读全文
posted @ 2019-10-14 18:50 L丶银甲闪闪 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 1.*()和[] 定义几个不同级别的指针类型的数据 char* p1; char** p2; char*** p3; char**** p4; char***** p5; char****** p6; char******* p7; 1)*运算 代码: printf("%d",*p1); 反汇编: 阅读全文
posted @ 2019-10-14 18:48 L丶银甲闪闪 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 1.指针数组 1)关于指针数组 一个数组,里面存储的是指针(也就是带*的类型) 指针数组: char* arr[5] = {0}; //用0填充数组 arr[0] = (char*)1; arr[1] = (char*)2; arr[2] = (char*)3; arr[3] = (char*)4; 阅读全文
posted @ 2019-10-14 18:47 L丶银甲闪闪 阅读(774) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 24 下一页