- 博客(19)
- 资源 (2)
- 收藏
- 关注
原创 PE格式详解(九)
好了,如果你确实按进程看到了这里,那么我首先要钦佩你的毅力,感谢你的支持,同时也恭喜你已经对PE格式有了比较全面的了解。回想起来,其实PE格式的理解并不很困难,只是比较复杂,也容易搞混结构关系,所以我写了这第九篇,把PE格式的总体结构按研究的顺序给出,让这个轮廓清晰地出现在脑中。 好,如果我们拿到一个EXE,想要去分析它的格式,我们可以按下面的步骤进行:
2008-08-31 00:15:00
1454
1
原创 PE格式详解(八)
上次讲了输出区段,还是比较简单的,但输入区段内容就稍稍多了点,保持耐心阿,这是本系列关于PE格式部分的最后一讲啦! 输入区段(Import Section),包含了所有从DLL中引用的函数的信息。与输出区段类似,这些信息是由几个数据结构描述的,其中最重要的是输入目录表(Import Directory)与输入地址表(Import Address Tabl
2008-08-31 00:14:00
2831
原创 PE格式详解(七)
首先介绍一下DLL相关内容。根据Win32 Programmers Reference所述(自己翻译的):“在Windows中,动态链接库(DLL)是含有函数与数据的模块。一个DLL在运行时期由其调用模块加载,当DLL被加载时,它会被映射到主叫进程的地址空间中去。 DLL内有两类函数:输出(exported)与内部(internal)。输出函数是要
2008-08-31 00:13:00
1776
1
原创 PE格式详解(六)
前面花了很大的力气终于把复杂的PE header讲完了,在PE header紧接着的就是区段表(Secton Table),所谓的紧接着,就是一个字节也不差的意思,^_^ 还记得么?我们在很前面讲File header时,里面一个成员就是NumberOfSections,就是区段的个数,是7个,那么对应的区段表中的表项也应当有7项。 每一
2008-08-31 00:12:00
2088
原创 PE格式详解(五)
上次文章因为实在太长,所以不得不把这么简单的一点内容单独成文。回顾一下,上次先说到PE header,然后说到其中的成员Optional header,它的最后一个结构成员DataDirectory,是一个含有16个IMAGE_DATA_DIRECTORY类型元素的数组,每一个元素都指向PE文件内的一个很重要的数据结构。 首先列出IMAGE_DATA_DIRECT
2008-08-31 00:11:00
1468
原创 PE格式详解(四)
特地把Optional header放一篇文章,是因为它比较复杂与庞大,也因为它比较重要。 老样子,先是IMAGE_OPTIONAL_HEADER结构:typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; // 又是Magic BYTE Ma
2008-08-31 00:09:00
1725
原创 PE格式详解(三)
PE header对应C中的IMAGE_NT_HEADER32结构,如下:typedef struct _IMAGE_NT_HEADERS { DWORD Signature; // PE Signature PE.. (50h 45h 00h 00h) IMAGE_FILE_HEADER FileHeader;
2008-08-31 00:06:00
1762
原创 PE格式详解(二)
一个PE程序总是以一个64字节的DOS header结构开头,目的就是为了如果程序在DOS中运行,DOS会识别它为正确的EXE并进而运行DOS stub,它的作用就是输出字符串”This program cannot run in DOS mode.”然后退出。 下面就是DOS Header在C语言中的结构表示(来自MinGW的winnt.h)typedef st
2008-08-29 22:12:00
2008
1
原创 PE格式详解(一)
本系列主要是参考英文原本ARTeam的PE File Format Tutorial并加以注解,以最简洁的语言来阐述PE格式,帮助大家快速入门。在开始之前,请确定您懂得C语言,至少是基本数据类型、数组和结构体,以及会WinHEX的基本使用方法。任何错误都欢迎指出,感激不尽! (一)介绍PE 格式 PE格式(Portable Executable,可移植可执行文件)是原生的
2008-08-29 22:11:00
2975
4
原创 Windows Internals 学习笔记(一)
《Windows Internals 4th Edition》是著名Windows内核专家Mark E. Russionovich与David Solomon Expert Seminars的主席David A. Solomon合作的一本介绍Windows架构和工作细节的著作。中文版由微软亚洲研究院研究员潘爱民老师翻译,这本书倍受各权威人员和机构所推荐,堪称经典。我第一次遇
2008-08-29 22:08:00
2809
1
原创 C反汇编实例(详细注解版)(三)
上次我分析了一下,debug模式下反汇编后的算法部分代码,天才的您可能觉得不算糟,想再搞点花样,那么本文就能满足你的需求。天书夜读上其实还贴出来了release模式下的代码,它经过vc编译器O2的优化,我初次看到反汇编代码时,还真汗了一把。不过定下心来细细品位还是可以看懂的,尽管正如原书所说,连语句的对应顺序也已经不见了。。。 废话不多说,先贴出代码大伙
2008-08-29 22:07:00
3025
1
原创 C反汇编实例(详细注解版)(二)
那么有了上述三方面的基础,我们就可以来逐一解读那段“传奇”的汇编代码了。初始化i00411A3E mov dword ptr [i],0跳转至条件判断00411A45 jmp myfunction+30h (411A50h)循环表达式,对i每轮加100411A47 mov eax,dword ptr [i]00411A4A add eax,100411
2008-08-29 22:06:00
2091
原创 C反汇编实例(详细注解版)(一)
呵,好久没写优快云文章了,来凑个热闹。最近我阅读了楚狂人,wowocock写的《天书夜读》试读本,对C反汇编感触颇深,书中有一例算法反汇编,其对汇编的阅读确实富有挑战,而该书中也未详解,在此,我谨将此例详细分析如下,帮助大家更好理解C反汇编代码,若有任何错误,请大家批评指正! 该例的要求是求两个3x3矩阵的乘积,其C源代码如下:int myfunction(int
2008-08-29 22:03:00
3715
1
转载 转载:火星人计算pi的牛程序分析
一、源程序 本文分析下面这个很流行的计算PI的小程序。下面这个程序初看起来似乎摸不到头脑,不过不用担心,当你读完本文的时候就能够基本读懂它了。 程序一:很牛的计算Pi的程序 int a=10000,b,c=2800,d,e,f[2801],g; main() { for(;b-c;) f[b++]=a/5; for(;d=0,g=c*2;c -=14,printf("%.4d",e+
2007-07-23 20:59:00
1275
原创 原创:大数阶乘的讨论(4) (源码未实现)
(3)中我说过,要根据不同的大小适当调整两个常数,否则会导致计算错误,显然这是相当麻烦,同时由于大量调用multiply函数,又浪费了不少时间。综上,我打算做以下改进:1.为了提高multiply的速度,可以把3里的multiply函数改成inline内联的,理由是(3)中的乘法函数比较简短,而且代码调用也只有1处,不会导致程序体积变得很大。不过注意,请把c后缀改成cpp!2.突然想到
2007-07-23 20:49:00
874
原创 原创:大数阶乘的讨论(3)
上次,我使用了字符数组来实现了大数阶乘的高精度计算,但效率较低,现在我又使用了uint数组来代替char数组,这样的速度又快了很多,代码也得以大为简化,现贴c语言源码如下,gcc编译通过://: High Precision Calculator updated at 17:14 7/11/2007 By Lewis Cheng//PS This program only support 40
2007-07-23 20:38:00
1011
原创 原创:大数阶乘的讨论(2)
上次我实现的阶乘虽然速度超快,但精确度实在欠缺,这次使用字符串数组储存每个位,可以实现阶乘完整输出,以下是我不久前写的c++代码,其中还有一个计算大整数乘幂的函数//: High Precision Calculator By Lewis Cheng Completed at 12:55 7/11/2007// P.S. This algorithm is based on char arra
2007-07-23 20:32:00
818
原创 原创:大数阶乘的讨论(1)
阶乘一般定义为n!=nx(n-1)x(n-2)...x2x1用普通函数可以表示为int fact(int n){ int r; while(n!=1) { r*=n; --n; } return r;} 也可以用函数递归形式int fact(int n
2007-07-23 20:26:00
930
原创 原创:基于公钥的LC加密算法
简易LC公钥密码Elementary Lewis Cheng Public-key Cryptosystem(初级版) 一.此密码体制涉及下列变量: 公开:密文c, 公钥e>2 , 正整数p保密:明文m>0, 私钥d, 正整数n二.计算过程如下:流程:发送者利用e,m执行加密运算得到c,p,d,解密者利用e,d,p,c解出m(1) 任意选
2007-07-23 20:00:00
1329
2
Oracle 8350262补丁!升级到10.2.0.4/5不能起em的进
2011-02-26
算法分析与设计(含java数据结构类库)
2011-01-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人