----C/C++
文章平均质量分 83
eGanWo
联系方式:641290869@qq.com
展开
-
C/C++开发:一维二维数组的创建与释放
一般情况,参考设备使用查找的时候,数据量太小,都不会去管内存分配是否成功,因为分配的内存太小。但是我们逆向的时候,却要将全部的信息都要输出,就不能和参考设备一样的处理;我门要仔细的使用malloc 和free,否者很容易出现内存访问错误;1、一维数据的创建与释放创建:v9_ptr_dtcCodesoffsets = (int *)malloc(4 * v26_dtc_Numbe...原创 2020-01-07 11:10:19 · 414 阅读 · 0 评论 -
C/C++ 开发:全局变量在多文件中的使用 ---一个链接问题的解决
背景:碰到一个链接问题:ID_decode.obj : error LNK2005: "char * ReadPath" (?ReadPath@@3PADA) 已经在 Head_decode.obj 中定义原因:char* HeadPatch 这个全局变量在.h 中赋值,然后此.h 又被ID_decode.cpp 和Head-decode.cpp 包含,重复定义;尝试:使用条件编译和#progma...原创 2019-11-01 14:29:44 · 853 阅读 · 1 评论 -
C语言读文件问题: fread读取文件返回的长度比实际读取的要少很多
问题:fread读取文件返回的长度比实际读取的要少很多,文件大小5M,以“r”模式fopen,读取10000个字节,返回长度0x301(769),实际读取了2400(0x960)个字节;如下图:解决方法:将fopen的模式改为 FILE* pFileRead = fopen(filename, "rb+");//二进制读取,如果只是r ,读取出来的数据会错误,20191014.就能...原创 2019-10-14 10:51:06 · 4968 阅读 · 0 评论 -
X86 逆向反汇编: 指针
注意点:1、带*类型的变量宽度永远是4字节、无论类型是什么,无论有几个*.2、带*类型的变量,++ 或者 -- 新增(减少)的数量是去掉一个*后变量的宽度3、带*类型的变量可以加、减一个整数,但不能乘或者除.4、带*类型变量与其他整数相加或者相减时:带*类型变量 + N = 带*类型变量 + N*(去掉一个*后类型的宽度) char* a; short* b; int* c;...原创 2019-05-03 11:27:39 · 664 阅读 · 0 评论 -
C/C++: C宏、头文件、内存分配、文件读写相关函数
#define 1、只作字符序列的替换工作,不作任何语法的检查2、如果宏定义不当,错误要到预处理之后的编译阶段才能发现# define MAX(A,B) ((A) > (B)?(A):(B))注意:1、宏名标识符与左圆括号之间不允许有空白符,应紧接在一起.2、宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换.3、为了避免出错,宏定义中给形参加上括号.4、末尾不需要分...原创 2019-05-03 23:16:56 · 375 阅读 · 0 评论 -
继承与模板的区别
体会:继承是数据的复制、模版是代码的复制。模板函数在编译完成之后,会生成对应参数数类型的函数;继承是对虚表、数据的复制,其中也涉及到使用虚函数继承产生多态时,虚表函数的替换;template<class T>void Sort(T arr, int nLength){ int i; int k; for (i = 0;i < nLength - 1;i++...原创 2019-05-25 08:44:14 · 1978 阅读 · 0 评论 -
new delete 的本质
C++里面new用来分配内存,delete用来释放内存,它们与C中的malloc和free有什么联系呢? int* pi = (int*)malloc(sizeof(int) * 1);//分配四字节 free(pi); //malloc->_nh_malloc_dbg->_heap_alloc_dbg->_heap_alloc_base->HeapAlloc...原创 2019-05-26 10:03:49 · 316 阅读 · 0 评论 -
Unicode字符集下CString与char *转换 (解决中文乱码等)(转)
UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家分享。先总结一下网上找到的三种转换的方法:方法一:使用函数setlocale setlocale(LC_ALL,"chs"); 需要包含头文件#include<loc...转载 2019-07-25 12:06:15 · 2165 阅读 · 0 评论 -
Unicode字符集和多字节字符集关系(转)
在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。多字节字符集: 在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7bits来表示一个 字符,总共表示128个字符,其中包括了 英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8bits表示一个...转载 2019-07-26 17:21:24 · 386 阅读 · 0 评论 -
逆向反汇编:从C/C++到汇编 (持续更新)
各位读者,总结如有错误请指正,谢谢。2.1 常见指令2.1.1堆栈相关命令Push:把一个32位操作压入堆栈中。Esp -4,我们认为栈顶是最小的区域;Pop:与push相反,一个数据出栈;sub:减法:第一个是被减数的寄存器,第二个参数是减数;Add:加法:Ret:返回,自动的弹出返回地址;Call:调用函数。将下一条指令的地址压入堆栈中,然后指向它调用的函数的开头;区别:...原创 2018-09-09 11:29:57 · 4719 阅读 · 0 评论 -
X86 :C语言局部变量、返回值、多维数组、结构体字节对齐规则 的注意点
一、返回值超过32位时,存在哪里?使用两个32位的寄存器返回64位的值mov eax,dword ptr [x] mov edx,dword ptr [ebp-8]二、编译器遵规则:char类型或者short类型的参数不但没有节省空间,反而浪费了多余的空间. 基于编译器的处理: 1、小于32位的局部变量,空间在分配时,按32位分配. 2、使用时按实际的宽度...原创 2019-05-02 14:30:13 · 510 阅读 · 0 评论 -
C++ 标准字符串std函数
回顾一些std中string类型的成员函数:allocator_type :作为一种类型;append :追加字符串(可以追加整个字符串,也可以追加字符串的一部分);assign :字符串初始化或者赋值;at :获取字符串中的第i个字符;back:返回字符串的最后一个字符; 返回的不是迭代器,这个和begin() 不同 ;basic_string :字符串的类型;begin :返回...原创 2019-04-01 00:03:01 · 854 阅读 · 0 评论 -
上机考试题目2:字符串最后一个单词的长度
题目描述:计算字符串最后一个单词的长度,单词以空格隔开。输入描述:一行字符串,非空,长度小于5000。输出描述:整数N,最后一个单词的长度。例如:输入 hello world ,输出:5#include<iostream>#include <string.h>#include <stdlib.h>#include <stdio.h&...原创 2019-03-29 00:17:57 · 175 阅读 · 0 评论 -
小撸一题3:字符串中的子串排序
题目说明:输入一个字符串,第一个字符串是DESC或者ASEC 表示递减或者递增,后面的数字串由逗号隔开;输入参数:DESC 2334,123,534输出参数: 123,534,2334#include<iostream> #include<string>#include<algorithm>using namespace std;bool...原创 2019-03-29 01:11:34 · 393 阅读 · 0 评论 -
C结构体与C++类的本质与区别
1、从汇编上看,C与C++本质是一样的,只是C++由编译器添加了一些新的东西;2、结构体和类作为参数传递时,一样是存于栈区,由esp-0xAA来拉高栈顶,然后一个个成员赋值到栈顶,如果成员多了,赋值多了,效率就会很低,所以,参数和返回值 最好是使用指针进行传参;如果是基本类型数据,使用的是Push... ;3、体会封装:封装就是将函数定义在结构体中,成员函数能直接使用成员函数,默认this...原创 2019-04-21 11:30:04 · 794 阅读 · 0 评论 -
C++ 友元
1、友元 是C++中的垃圾,破坏了封装,很有可能是因为C++设计者想要兼容以前已经大量存在的面向过程的代码;不推荐使用;2、友元是单向的,友元函数可以调用当前类的成员;3、友元函数和类的成员函数的区别(1) 成员函数有this指针,而友元函数没有this指针(2) 友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友4、什么情况下需要友元函数:(1) 运算符重载的某...原创 2019-04-21 16:41:29 · 1255 阅读 · 0 评论 -
堆栈
1、堆栈是系统启动时已经分配好的一段内存(4G),供程序执行使用;内存窗口查看:dd [FS] 可以查看得到,也可以在堆栈窗口上下拉到顶,就可以看到当前执行的程序分配的栈顶和栈底;2、堆栈从高地址向低地址使用;3、esp: 栈指针寄存器,表示当前程序使用堆栈到了那里;从堆栈中可以看到当前程序执行的记录;4、mov DWORD PTR DS:[esp],1 ;向堆栈中压...原创 2019-04-21 17:41:37 · 219 阅读 · 0 评论 -
C++标准模板库---string 操作函数集合分类
#include <string.h>string Manipulation字符串查找: strstr: 查找字串, 返回指向字串首地址的指针; strcspn: 在字符串中查找 指定字符集合中的字符 首次出现的位置; strpbrk:在字符串中查找 指定字符集合中的字符 首次出现的首地址; strrc...原创 2019-04-14 03:28:39 · 244 阅读 · 0 评论 -
window内核 :一些常用的概念缩写
内核:系统内核本身 或者 第三方软件以内核模式加载的驱动文件;----R0环分段机制:计算出一个线性地址;分页机制:将线性地址映射到物理地址,从而存取内存中的数据和指令;空洞: 内核空间太大,往往用不完,64位的系统一般都存在空洞;SCM:服务控制管理器;BSS:HAL: hardware Abstraction Layer ,硬件抽象层;services.exe : 启动服务子程...原创 2019-04-17 23:08:18 · 470 阅读 · 0 评论 -
上机考试题目1:提取不重复的整数
题目描述输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。输入描述:输入一个int型整数输出描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数注意点: 反序之后的整数可能会超过int类型的表示范围;#include <string.h>#include <stdlib.h>...原创 2019-03-26 23:33:47 · 122 阅读 · 0 评论