摘要:
经过查询“BEGIN_MESSAGE_MAP”与“END_MESSAGE_MAP()”之间的数据,我们可以发现,文件打开的这个方式在CXXApp中进行实现,为了能够调用自定义的对话框,我们必须跳过系统的函数,所以我们可以将这个消息注释掉,然后自己在相应的类里面进行实现。 LPCTSTR szFilter = _T("汇编文件(*.asm)|*.asm|所有文件(*.*)|*.*||"); CFileDialog oFileDlg(TRUE, _T(".asm"), NULL, OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY, s 阅读全文
摘要:
1、逻辑左移和算术左移是一样的,但是算术右移与逻辑右移是不一样的。2、循环左移或者循环右移与循环带进位左或者右移3、jmp指令 : 操作码+地址差; {(都在段内跳)地址差为字节的,称为短转移;地址差为字的,称为近转移;}4、JCXZ 标号,当CX值为0,则跳到标号处 阅读全文
摘要:
1、mov指令的规则: (一)除了源操作指令外,mov指令的源操作数与目标操作数不能同时为存储器中的操作数 (二)源操作数与目标操作数的数据类型要一致。2、XCHG交换指令规则: xchg oprd1, oprd2; oprd1,oprd2可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数3、地址传送指令: lea reg, oprd该指令把oprd的有效地址传送到操作数,操作数oprd必须是一个存储器操作数,操作数reg必须是一个16通用寄存器。4、neg,取被指令neg oprdoprd = o - oprd;如在字节操作时对-128取补,或者在字操作时.. 阅读全文
摘要:
1、汇编语言与CPU有着密切的关系。2、汇编格式指令是机器指令的符号表示。3、8086与8088的最大区别在数据线上,8086是16条数据线,8088是8位数据线。4、8086可以分为两个部分:EU(执行部件) 与 BIU(总线接口部件);5、80286由4个部分组成,分别是执行部件(EU),总线部件(BU),接口部件(IU),地址部件(AU);6、80286可按二种模式运行:实模式(相当于8086)、保护模式(80286的本质)。7、存储单元的大小是一个字节,存储时采用“高高低低”的原则,而针对一个字单元,字单元的地址采用低地址方式表示。8、逻辑段必须满足二个条件: (1)逻辑段的开始地址. 阅读全文
摘要:
(一)引出表,是将dll中所有的函数引出,并提供查询。(个人理解)(二)DLL/EXE要引出一个函数给其他DLL/EXE使用,有两种实现方法: 通过函数名引出或者仅仅通过序数引出。比如某个DLL要引出名为"GetSysConfig"的函数,如果它以函数名引出,那么其他DLLs/EXEs若要调用这个函数,必须通过函数名,就是GetSysConfig。另外一个办法就是通过序数引出。什么是序数呢? 序数是唯一指定DLL中某个函数的16位数字,在所指向的DLL里是独一无二的。例如在上例中,DLL可以选择通过序数引出,假设是16,那么其他DLLs/EXEs若要调用这个函数必须以该值作 阅读全文
摘要:
(一)IMAGE_DATA_DIRECTORY STRUCT VirtualAddress dd ? isize dd ? IMAGE_DATA_DIRECTORY ENDS (二)data directory数组第二项(Import symbols)的IMAGE_DATA_DIRECTORY中的VirtualAddress包含引入表地址,这块地址是一个 IMAGE_IMPORT_DESCRIPTOR结构数组。每个结构包含PE文件引入函数的一个相关DLL的信息。比如,如果该PE文件从10个不同的DLL中引入函数,那么这个数组就有10个成员。该数组以一个全0的成员结尾。IMAGE_IMPORT_ 阅读全文
摘要:
(一)data directory 是一个 IMAGE_DATA_DIRECTORY结构数组,共有16个成员。如果您还记得节表可以看作是PE文件各节的根目录的话,也可以认为 data directory 是存储在这些节里的逻辑元素的根目录。明确点,data directory 包含了PE文件中各重要数据结构的位置和尺寸信息。每个成员包含了一个重要数据结构的信息。MemberInfo inside0Export symbols1Import symbols2Resources3Exception4Security5Base relocation6Debug7Copyright string8Un 阅读全文
摘要:
节表:其实是一个IMAGE_SECTION_HEADERS数组。单个节表的数据大小为40IMAGE_NT_HEADERS.FileHeader.NumberOfSections指出。IMAGE_SECTION_HEADERS结构IMAGE_SECTION_HEADERSTRUCTName1dbIMAGE_SIZEOF_SHORT_NAMEdup(?);8个字节的节区名称unionMiscPhysicalAddressdd?VirtualSizedd?;节区的尺寸endsVirtualAddressdd?;节区的RVA地址SizeOfRawDatadd?;在文件中对齐后的尺寸PointerToR 阅读全文
摘要:
typedef struct _IMAGE_OPTIONAL_HEADER{//// Standard fields.//+18h WORD Magic; // 标志字, ROM 映像(0107h),普通可执行文件(010Bh)+1Ah BYTE MajorLinkerVersion; // 链接程序的主版本号+1Bh BYTE MinorLinkerVersion; // 链接程序的次版本号+1Ch DWORD SizeOfCode; // 所有含代码的节的总大小+20h DWORD SizeOfInitializedData; // 所有含已初始化数据的节的总大小+24h DWORD Si 阅读全文
摘要:
IMAGE_FILE_HEADER STRUCT Machine WORD ? NumberOfSections WORD ? TimeDateStamp dd ? PointerToSymbolTable dd ? NumberOfSymbols dd ? SizeOfOptionalHeader WORD ? Characteristics WORD ? IMAGE_FILE_HEADER ENDS Field nameMeaningsMachine该文件运行所要求的CPU。对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch)。我们尝试了LU... 阅读全文