C/C++语言基础
xkjcf
这个作者很懒,什么都没留下…
展开
-
VM-Entry Interruption-Information的struct构建和读取代码。
#includeusing namespace std;typedef struct _Int_info{ unsigned vector :8; unsigned int_type :3; unsigned error_code :1; unsigned Reserved :19; unsigned valid :1;}IntInfo,*pI原创 2012-07-15 14:15:41 · 709 阅读 · 0 评论 -
C/C++拾遗录--POPAD不会影响ESP
PUSHA/PUSHAD,POPA/POPAD它们配合使用,用于8个16位/32位通用寄存器与堆栈之间的数据传送。PUSHAD指令压入32位寄存器,使他们按照EDI,ESI,EBP,ESP,EBX,EDX,ECX,最后是EAX的顺序出现在堆栈中,POPAD使弹出的顺序正好相反。PUSHA/PUSHAD,POPA/POPAD从80286处理器开始使用.执行PUSHA/PUSHAD,POPA/原创 2012-07-18 17:37:45 · 1498 阅读 · 0 评论 -
GCC嵌入式ASM快速指南
本文从Inline assembly for x86 in Linux中摘译。Table of Contents1 简要GNU汇编语法1.1 寄存器命名1.2 来源和目的的顺序1.3 操作数的尺寸1.4 直接操作数1.5 直接内存引用2 内联汇编2.1 内存操作数约束2.2 匹配约束2.3 常见内联汇编用例2.3.1 “asm”和寄存器约束“r”2.转载 2012-07-23 20:30:44 · 5869 阅读 · 0 评论 -
使用API函数操作ini配置文件
INI文件是Windows系统中一类比较重要的文件,可以使用一些API函数直接对INI文件进行读写操作。主要用三个函数就可以实现简单的INI文件读写功能,这三个函数是:1)WritePrivateProfileString:可以在文件中添加字段,可以添加String也可以添加Int,返回值表示写入是否成功,函数原型为: BOOL WritePrivateProfileString(原创 2013-04-10 22:36:19 · 869 阅读 · 0 评论 -
C/C++拾遗录--查看关于_declspec(naked)与普通的函数在寄存器变化方面的不同点
#include /* >>>>>> _declspec(naked) 使用 <<<<<<<<*/#define Reg ebp //通过改变该宏定义值来查看不同的寄存器unsigned int retaddr;int i=0;unsigned int temp;_declspec(naked) void test1 (){ __as原创 2012-07-14 11:14:06 · 3314 阅读 · 0 评论 -
C/C++拾遗录--编程中的编译错误
1.问题:error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format解决方法:用UltraEdit查看发现好到不必要的字符。例如“?”等,去掉即可。可以在另存为成DOS格式2.问题:error C2447: '{' : missing function原创 2012-07-02 18:01:58 · 918 阅读 · 0 评论 -
手动脱壳----PECompact 2.x -> Jeremy Collake
网上也有很多手动脱壳的教程,但是光看不写总觉的像自己没学过似的。 操作环境: 操作系统:Windows 7 Ultimate OD版本:Olldbg 1.10 被脱壳软件:文章最后提供下载下边利用ESP原理脱壳。 首先使用OD载入图标王程序,出现提示确定即可。开头的代码如下:00405A99 > $ B8 D0C74200原创 2013-04-21 00:36:39 · 1788 阅读 · 0 评论 -
Windows编译安装QT
安装ActivePerl-5.6.1.628 安装mingw5.1.6到C:\MinGW并将环境变量Path设置追加C:\MinGW\bin 增加环境变量QTDIR为C:\QT 执行./bin/syncqt.bat 会建立QT的安装位置 configure --plugin-sql-sqlite --plugin-sql-odbc -rele原创 2013-11-17 17:15:26 · 1445 阅读 · 0 评论 -
C/C++拾遗录--通过i++和++i赋值不同
C/C++中i++和++i是非常常见的,我们也明白他们的不同,这里从反汇编调试的角度观察他们的操作顺序。int time=0;int i=0;time=i++;int j=0;time=++j;反汇编如下:int time=0;00413632 mov dword ptr [time],0 int i=0;00413639 mov原创 2012-12-26 15:30:15 · 2194 阅读 · 0 评论 -
C/C++拾遗录--地址方法访问struct结构
#include typedef struct __REGISTERS_{ unsigned int EDI; unsigned int ESI; unsigned int EBP; unsigned int ESP; unsigned int EBX; unsigned int EDX; unsigned int ECX; unsigned原创 2012-07-13 20:23:50 · 785 阅读 · 0 评论 -
C/C++拾遗录--关于宏定义汇编函数的的做法
#include #define Test() { \ __asm PUSH EAX\ __asm and EAX ,0xFFFFDFFF \ __asm POP EAX \ }#define iPlusPlus i++int main(){ Test(); return 0;}宏定义汇编函数的做法,这样可以实现但是不是特别的简练。原创 2012-07-14 10:28:52 · 1382 阅读 · 0 评论 -
获取83号中断向量地址的计算方法
#include #define Print(message, value) { DbgPrint("[vmm] %-20s 0x[%08X]\n", message, value); }////////////////////////////////////////////////////////////////////////// VOID UnloadDriver(IN PD原创 2012-07-22 21:21:14 · 3938 阅读 · 0 评论 -
用于队列的数据函数供今后使用
#include using namespace std;typedef unsigned long ULONG;#define MAX_WINDOWS 1024typedef struct _Ext_Inte_{ ULONG total; ULONG head; ULONG tail; ULONG ext_info[MAX_WINDOWS]; ULON原创 2012-07-22 10:28:13 · 639 阅读 · 0 评论 -
BitVisor中外部中断的处理流程浅析
这里分析一下关于BitVisor中关于外部中断(0x00000001)的处理流程,开始的创建虚拟话环境,初始化数据结构就不介绍了。首先从vt_mainloop()(.\core\vt_main.c)开始说起。相关函数值介绍与中断处理有关部分。在vt_mainloop()主要在函数末尾通过一个判断是否单步执行的if语句,将流程分为两种情况。但是其实所要操作是一样的只有一个函数(vt__vm_ru原创 2012-07-24 15:15:30 · 2517 阅读 · 0 评论 -
C/C++拾遗录--for循环中的三语句执行顺序
for循环的执行语法是:for(;;) 语句;初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用";"分开。在for循环中的三个语句执行顺序是如何的呢?通过对汇编代码的调试发现了其中的玄机。for( int i = 0;i <= 10;i++){ cout<原创 2012-12-26 15:16:02 · 3107 阅读 · 0 评论 -
C/C++拾遗录--每种内置类型的长度
#include using namespace std;int main(){ cout<<"type\t\t\t"<<"size"<<endl <<"bool\t\t\t"<<sizeof(bool)<<endl <<"char\t\t\t"<<sizeof(char)<<endl <<"signed char\t\t"<<sizeof(signed ch原创 2012-12-26 17:25:03 · 629 阅读 · 0 评论 -
C/C++拾遗录--关于goto和jmp语句浅析
今天比较了一下goto语句和jmp语句的区别。goto:如果编译器检测到goto语句和目的地址之间的语句无法执行是,会忽略不会编译。 #include using namespace std;int main(){ cout<<"size of int : "<<sizeof(int)<<endl; goto show_long; cout<<"size o原创 2012-07-24 22:29:34 · 2411 阅读 · 0 评论 -
C/C++拾遗录--关于位域的一些总结
测试环境 : Windows 7旗舰版,Microsoft Visual Studio 2010。 由于信息存储时,可能只占一位或者几位二进制位,比如开关量,只需要占据一位即可。为了节省存储空间,并且处理简单,C语言提供了一种数据结构,称为“位域”。 所谓“位域”是把一个字节的二进制位划分为不同区域,并指明每个域的名称和长度,允许程序按照域名来进行数据的操作原创 2012-06-28 08:53:30 · 1571 阅读 · 0 评论 -
C/C++拾遗录--关于一个C语言小程序的分析
虽然编了几年程序,但是对于程序到底是什么规则变成汇编代码的,在这里搞了一个小程序。用VC查看了一下汇编代码。在此之前先介绍一下关于函数运行是堆栈变化的细节。在高级语言编写程序时,函数的调用是很常见的事情,但是在函数调用过程中堆栈的变化通常有几个细节:1.父函数将函数的实参按照从右至左的顺序压入堆栈;2.CPU将父函数中函数调用指令Call的下一条指令地址EIP压入堆栈;3.父函数通原创 2013-01-20 14:58:58 · 2615 阅读 · 0 评论 -
AT&T-汇编语言与C语言联合编程
AT&T汇编语言实现输出Hello,world.文件print.s的内容.dataoutput: .ascii "hello,world!\n"len = . - output.text.globl _start_start: movl $len,%edx movl $output,%ecx movl $1,%ebx movl原创 2017-12-03 11:05:55 · 665 阅读 · 0 评论