![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
读书笔记
闭才
这个作者很懒,什么都没留下…
展开
-
strlen和strcpy的识别
字符串处理函数通常会被编译器优化为内联函数,本文试分析VS2015下O2优化的strlen和strcpy的识别特征。n = strlen(szHello);00409EA2 8D 45 E8 lea eax,[szHello] ;取字符串首地址00409EA5 83 C4 08 add esp,8原创 2016-09-09 15:57:41 · 665 阅读 · 0 评论 -
PE文件头结构
typedef struct _IMAGE_FILE_HEADER { WORD Machine; 运行平台 WORD NumberOfSections; 文件的节数目 DWORD TimeDateStamp; 文件创建日期和时间 DWORD PointerToSymbolTable; 指向符号表(用于调原创 2016-09-16 16:51:17 · 444 阅读 · 0 评论 -
VS2015对除法的优化
O2int main(int argc, char* argv[]){00411D20 55 push ebp 00411D21 8B EC mov ebp,esp printf("%d", argc / 9);00411D23 B8 39 8E E3 38 mov原创 2016-09-04 17:46:52 · 1491 阅读 · 0 评论 -
PE可选头
typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; 10B 32位PE 20B 64位PE 107 ROM映像 BYTE MajorLinkerVersion; 链接器版本号 BYTE MinorLinkerVersion; 链接器副版本号 DWORD原创 2016-09-16 20:16:55 · 1293 阅读 · 0 评论 -
Switch的识别
1.if else模式:case语句块不超过3条 通过O2优化后的代码来看, if else if 结构会在条件跳转后紧跟语句块,而switch结构则将所有的条件跳转都放在一起。 特征1:sub eax,case1je add1sub eax,case2je add2sub eax,case3jne addend特征2:语句mov esp,ebppop ebpret语原创 2016-09-08 17:13:15 · 1000 阅读 · 0 评论 -
PE节表头
总是在PE文件头开始的偏移00f8h处。 typedef struct _IMAGE_SECTION_HEADER{BYTE Name1[IMAGE_SIZEOF_SHORT_NAME]; // 8个字节 节表名称,如“.text”//IMAGE_SIZEOF_SHORT_NAME=8union{DWORD PhysicalAddress; // 物理地址 节区尺寸 未对齐前的实际大小 DWOR原创 2016-09-18 20:27:53 · 614 阅读 · 1 评论 -
IAT
ypedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; // RVA to原创 2016-09-29 13:58:00 · 455 阅读 · 0 评论 -
WCF手动搭建 HelloWorld
1.新建两个WinForm, Server, Client 2.Server中添加引用System.ServiceModel 3.定义一个接口,其中包含一个TestMethod方法,也就是服务协定。服务协定就是附加了ServiceContract特性的接口,方法附加OperationContractAttribute特性,作为服务操作,可以供客户端程序调用,如果不加OperationContr原创 2017-06-23 14:04:48 · 358 阅读 · 0 评论 -
WCF接收消息头
用OperationContext.Current.IncomingMessageHeaders得到从客户端收到的消息头 1.修改Server端的MyService public string TestMethod() { //用指定的localName和URI查找标头位置 int原创 2017-06-23 15:19:38 · 1400 阅读 · 0 评论 -
WCF数据协定
下文枯燥无趣 毫无逻辑 不建议阅读 是传说中的WCF系列数据协定部分的摘抄 建议阅读原文 http://blog.csdn.net/tcjiaan/article/details/8195867 不管在服务器端我们把数据成员定义为公共属性还是私有字段,到了客户端都全变成公共属性了 这什么会这样呢?其实数据协定是通过XML来传输的,你想一想XML序列化的特点就找到些启发了,XML序列化和反序列原创 2017-06-23 16:43:21 · 457 阅读 · 0 评论 -
PE文件开胃
1.DOS头 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number DOS签名 4D5A "MZ" WORD e_cblp; // Bytes on原创 2016-09-16 15:31:06 · 300 阅读 · 0 评论 -
菱形继承的识别
子类的构造CSofaBed SofaBed;0041478E 6A 01 push 1 ;构造祖父类的标志 true表示构造 00414790 8D 4D C8 lea ecx,[SofaBed] 00414793 E8 1F D0 FE FF call原创 2016-09-15 16:41:46 · 381 阅读 · 0 评论 -
成员函数的识别
调用成员函数与普通函数的差别在于,调用成员函数时要先转到跳转表,再到函数入口。 Test.SetNumber(5);00407797 6A 05 push 5 00407799 8D 45 F8 lea eax,[Test] 0040779C 50 push原创 2016-09-10 13:43:20 · 677 阅读 · 0 评论 -
函数参数为对象的识别
当对象体积较小,成员较少时,编译器会把对象的成员分别压栈。而当对象体积较大时,编译器会把对象中的所有数据复制到栈空间中。 大小标准不明,可能是16。 最先定义的数据成员最后压栈。 CFunTest FunTest; FunTest.m_nOne = 1;0040779A C7 45 F4 01 00 00 00 mov dword ptr [FunTest],1原创 2016-09-10 15:13:04 · 436 阅读 · 0 评论 -
返回值为对象的函数识别
调用部分: CReturn Return; Return = GetCReturn();004077A7 8D 85 70 FF FF FF lea eax,[ebp-90h] ;返回的对象的栈空间首地址004077AD 50 push eax 004077AE E8 68 A5 FF F原创 2016-09-12 14:59:34 · 534 阅读 · 0 评论 -
构造函数的识别
1.局部对象 CNumber Number;00408F7D 8D 4D EC lea ecx,[Number] ;this指针的来源 对象的首地址00408F80 E8 AA B0 FF FF call CNumber::CNumber (040402Fh) ;调用构造函数 先到跳转表CN原创 2016-09-12 19:31:26 · 654 阅读 · 0 评论 -
虚函数的识别1
1.有虚函数的类在编译中会加入一个隐藏数据成员,虚表指针。这就使得类的大小比数据成员的大小大4。 2.使用默认构造函数时,构造函数中会出现虚表指针,特征是二次跳转后到跳转表,虚函数表。 CVirtual MyVirtual;004076D5 8D 4D E8 lea ecx,[MyVirtual] 004076D8 E8 A5 C6 FF FF原创 2016-09-13 12:36:36 · 548 阅读 · 0 评论 -
虚函数的识别2
1.虚函数调用过程:void ShowSpeak(CPerson * pPerson) pPerson->ShowSpeak();00407CFE 8B 45 08 mov eax,dword ptr [pPerson] 00407D01 8B 10 mov edx,dword ptr [eax]原创 2016-09-14 14:49:19 · 354 阅读 · 0 评论 -
多重继承的识别
在多重继承中,子类虚表指针的个数取决于所继承父类的个数,有几个父类就会有几个虚表指针(虚基类除外)。这些指针在将子类对象转换成父类指针时使用,每个虚表指针对应一个父类。class CSofaBed : public CSofa, public CBed{public: CSofaBed(){00407838 89 4D F0 mov dword原创 2016-09-14 17:33:39 · 317 阅读 · 0 评论 -
纯虚函数的识别
虚表中的纯虚函数会被编译器统一替换成_purecall.;构造函数CVirtualBase::CVirtualBase: 0040787F 59 pop ecx 00407880 89 4D F8 mov dword ptr [this],ecx 00407883 8B 45 F8原创 2016-09-15 15:26:19 · 460 阅读 · 0 评论 -
Debug调试版 float指令
VS2015下的浮点指令。 浮点型与整形转换int main(int argc,char* argv[]){004117B0 55 push ebp 004117B1 8B EC mov ebp,esp 004117B3 81 EC CC 00 00 00 sub e原创 2016-09-03 15:42:40 · 860 阅读 · 0 评论 -
WCF流与文件传输
开启流模式,主要是设置一个叫TransferMode的属性,所以,你看看哪些Binding的派生类有这个属性就可以了。 TransferMode其实是一个举枚,看看它的几个有效值: Buffered:缓冲模式,说白了就是在内存中缓冲,一次调用就把整个消息读/写完,也就是我们最常用的方式,就是普通的操作协定的调用方式; StreamedRequest:只是在请求的时候使用流,说简单一点就是在传入原创 2017-06-23 21:41:10 · 790 阅读 · 0 评论