随笔分类 - x86/x64汇编
摘要:# error A2108: use of register assumed to ERROR ``` ASSUME FS:NOTHING mov eax, fs:[0c0h] ASSUME FS:NOTHING ``` [Error a2108 use of register assumed to
阅读全文
摘要:数据结构 利用qiling 分析 httpstager shellcode import os from typing import Dict from qiling import * from qiling.const import * from unicorn import * from uni
阅读全文
摘要:WAY 1: 1、右键 .asm 文件,点击“属性”。 2、在项类型里选择“自定义生成工具”。 3、点击应用,然后点击左边“自定义生成工具”里的“常规”。 4、在“命令行”里输入 ml64 /Fo $(IntDir)%(fileName).obj /c %(fileName).asm 在“输出”里输
阅读全文
摘要:c++异常处理 int main(){ try { throw 1; } catch ( int e ) { printf("catch int\r\n"); } catch ( float e) { printf("catch float\r\n"); } } 函数开始,注册异常处理函数 008C
阅读全文
摘要:单继承,父类中没有虚函数 单继承,父类存在虚函数,子类重写虚函数 单继承,父类存在虚函数,子类不新定义虚函数 单继承,父类存在虚函数,子类新定义虚函数 单继承,父类不存在虚函数,子类定义虚函数 多继承,父类都有虚函数,子类有重写虚函数 多继承,父类1,父类2,其中父类1没有虚函数,父类2有虚函数,子
阅读全文
摘要:虚函数是面向对象程序设计的关键组成部分。对于具有虚函数的类而言,构造函数和析构函数的识别流程更加简单。而且,在类中定义了虚函数之后,如果没有提供默认的构造函数,编译器必须提供默认的构造函数。 对象的多态性需要通过虚表和虚表指针来完成,虚表指针被定义在对象首地址的前4字节处,因此虚函数必须作为成员函数
阅读全文
摘要:构造函数和析构函数出现的时机 局部对象 109: // 局部对象定义调用构造函数 110: 111: CNumber Number; 00C8A37D 8D 4D EC lea ecx,[Number] 00C8A380 E8 14 97 FF FF call CNumber::CNumber (0
阅读全文
摘要:在C++中,结构体和类都具有构造函数、析构函数和成员函数,两者只有一个区别:结构体的访问控制默认为public,而类的默认访问控制是private。 对于C++中的结构体而言,public、private、protected的访问控制都是在编译期进行检查,当越权访问时,编译过程中会检查出此类错误并给
阅读全文
摘要:字符串初始化字符数组 58: char as[] = "hello word"; 00AC7308 A1 70 2E B6 00 mov eax,dword ptr [string "hello word" (0B62E70h)] 00AC730D 89 45 EC mov dword ptr [a
阅读全文
摘要:malloc _malloc 0037E8C0 8B FF mov edi,edi 0037E8C2 55 push ebp 0037E8C3 8B EC mov ebp,esp 0037E8C5 6A 00 push 0 0037E8C7 6A 00 push 0 0037E8C9 6A 01 p
阅读全文
摘要:vs2017下测试 34: for (int i = 0; i < 5; i++) 0029734E C7 45 F8 00 00 00 00 mov dword ptr [ebp-8],0 00297355 EB 09 jmp main+30h (0297360h) 00297357 8B 45
阅读全文
摘要:x86 msvc编译下 函数调用约定 void __stdcall ShowStd(int a, int b, int c, int d) { printf("%d %d %d %d\n", a, b, c, d); } void __cdecl ShowCde(int a, int b, int
阅读全文
摘要:debug do···while 23: int nSum = 0; 00A572AE C7 45 F8 00 00 00 00 mov dword ptr [nSum],0 24: int nIndex = 0; 00A572B5 C7 45 EC 00 00 00 00 mov dword pt
阅读全文
摘要:switch 线性处理 24: int nIndex = 0; 01377EBE C7 45 F8 00 00 00 00 mov dword ptr [nIndex],0 25: scanf("%d", &nIndex); 01377EC5 8D 45 F8 lea eax,[nIndex] 01
阅读全文
摘要:1、debug if: 10: if (argc == 0) 0010711E 83 7D 08 00 cmp dword ptr [argc],0 00107122 75 11 jne If+35h (0107135h) //不相等则跳转(为保持代码顺序,if的比较条件在汇编中相反) 11: {
阅读全文
摘要:有符号数溢出: void BreakFor() { for (int i = 1; i > 0; i++) { printf("%d \r\n", i); } } 上面的程序并不是死循环,当有符号数增加到最大整数后,继续加一会进位修改符号位,从而成为负数。 自增、自减 98: int nVarOne
阅读全文
摘要:条件跳转表 汇编语言-条件跳转指令 直接转移指令 指令格式机器码测试标志条件说明符号 JO OPR 70 OF=1 结果有溢出 JNO OPR 71 OF=0 结果无溢出 JC OPR 72 CF=1 小于 < JNC OPR 73 CF=0 大于或等于 >= JZ/JE OPR 74 ZF=1 结
阅读全文
摘要:接上篇:《C++反汇编与逆向分析技术揭秘》--算术运算和赋值 printf("argc / 4 = %d\n", argc / 4); printf("argc / 5 = %d\n", argc / 5); printf("argc / 7 = %d\n", argc / 7); printf("
阅读全文
摘要:一、加法 1.Debug下: 14: int nVarOne0 = 1 + 5 - 3 * 6;//编译时计算得到结果 00C0550E C7 45 F8 F4 FF FF FF mov dword ptr [nVarOne0],0FFFFFFF4h 15: cout << nVarOne0 <<
阅读全文
摘要:《C++反汇编与逆向分析》和《程序员的自我修养》都是以VC6的代码作为例子讲解的。这里是在vs2017下,CRT代码有些区别,但整体流程上都是初始化环境,设置参数,最后转到用户main函数。 class COne { public: COne() { printf("COne \r\n"); } ~
阅读全文

浙公网安备 33010602011771号