随笔分类 - c语言
string为接口的注意事项
摘要:string为接口的注意事项 问题描述 在一个应用程序中用到了另外一个库的dll,向dll的接口传递std::string参数时报错。由于这方面的问题比较多,所以我进行了深入研究。 前置知识 在vs项目右键 -> 属性 ->C/C++ ->代码生成->运行库,有四个选项,/MD 、/MDd、/M
c++ 快速排序
摘要:快速排序的思想是使某个数在它该在的位置,然后对这个数前后两部分进行递归处理即可 例子: 6 5 79 2 6该在的位置应该在第三位 5 2 6 79 那么如何使一个数在它该在的位置呢,观察上面的例子,要使一个数在它该在的地方应该要让所有小于它的数在左边,所有大于它的数在右边即可 按照上面的思想我们可
封装的一些windows进程相关的库
摘要:my_pro.h /************************************************ MY_PRO.H 文件注释 文件名:MY_PRO.H 作者:czl 创建时间:2021/3/31 21:22 ************************************
使用c++调用python(二):传入回调函数
摘要:传入回调函数大概的原理是用c++构建一个python模块,并将回调函数定义进去 initializer.h #pragma once #include <Python.h> #ifdef _WIN32 #include <Windows.h> #elif defined __APPLE__ #end
c++ 如何在头文件里写实现代码
摘要:问题提出 现在有一种hpp文件,它是直接实现代码,其实它就是个头文件,但是在头文件里编写实现代码会重定义错误 test.h #pragma once #include <iostream> void hello() { printf("hello"); } test.cpp #include "te
控制台输出彩色字体
摘要:代码示例 printf("\033[4;31;42m color!!! \033[m Hello \n"); 输出结果 下面介绍各个字符的组成含义 \033[4;31;42m 表示彩色字符的开始,后面的字符都会被彩色打印 中括号的边的三个数字分别代表 打印格式、字体颜色 、 背景色,下面介绍它们的取
delete与delete []的区别
摘要:一直很好奇delete 和 delete []有什么不同?今天我从汇编的角度看一看 测试源代码 #include <iostream> int main() { char* data1 = new char[10]; char* data2 = new char[10]; std::cout <<
windows使用windows-kill模拟ctrl+c信号进行进程通信
摘要:今天我运行aria2c下载视频时发现如果强制终止进程的话,aria2c无法进行断点重下,但是ctr-c的话就能下载 可是如何在编程中模拟Ctrl+c,在网上搜索一番,在github找到了一个开源项目windows-kill,下载下来是一个exe,windows-kill.exe, 只要命令行执win
VS创建hpp文件的注意事项(hpp文件出现定义函数重定义)
摘要:今天我自己犯了一个傻事,我创建hpp文件时是用cpp文件重命名的,这导致vs把这个hpp文件当做cpp处理,我一include 这个hpp文件就出现重定义错误了 应该新建头文件然后再重命名为hpp,这样vs会将这个hpp当作头文件处理,不会再另外创建一个obj,因引用方和被引用方都有函数定义而导致重
有符号非2的幂的第一种优化
摘要: 这样就把除法转换为被除数x乘以一个整数,再右移n位的形式,但是有一个问题,因为右移n位是取下整 右移n位是取下整 例子: -3/2 = 0xFFFFFFFD / 2 =0xFFFFFFFD >> 1 =
关于数据的一些思考
摘要:计算机的工作流程归根结底是输入->处理->输出的过程,而数据正是被处理的对象。而数据的考察有以下两点 1.在何处 2.如何解释 我觉得指针就很好的演示了这个道理,指针是由地址和类型组成的,而地址表明了这个数据在何处,数据的属性是什么,数据的作用域是什么? 类型表明了数据是如何解释的,数据的长度和意义
逆向工程核心原理:PE映像切换 源代码
摘要:示例代码下载地址:https://pan.baidu.com/s/1cb1qg9YVgzwQ2X9umSU7qw 密码:pnmq Debugme3.cpp #include <Windows.h> #include <stdio.h> #include <tchar.h> #define Modul
Windbg 查看TEB结构体的组成成员
摘要:进入内核调试模式(注入符号文件加载正确) 输入命令:dt ntdll!_TEB 若要详细信息 输入命令:dt -r1 ntdll!_TEB
PE添加TLS的注意事项
摘要:1. TLS目录全部是VA,回调函数地址数组也是VA typedef struct _IMAGE_TLS_DIRECTORY32 { DWORD StartAddressOfRawData; /* tls节区的起始地址 */ DWORD EndAddressOfRawData; /* tls节区的最
C语言注册TLS回调函数
摘要:#include <tchar.h> #include <windows.h> #pragma comment(linker,"/INCLUDE:__tls_used") //告诉链接器要使用TLS void print(char * msg){ HANDLE out = GetStdHandle(
栈帧的作用
摘要:栈帧就是利用EBP(栈帧指针,请注意不是ESP)寄存器访问栈内局部变量、参数、函数返回地址等的手段。 下面通过一个案例呈现: 先编写一个很简单的程序,但是这个程序一定要用到局部变量或参数,详细代码见下图 Test.cpp #include <stdio.h> #include <Windows.h>
X64位系统的函数调用方式
摘要:1.x64系统的调用方式统一使用一种变形的fastcall,即前四个参数在寄存器存储,由函数自己清理,后面的参数由栈存储,由调用者清理。具体存储位置见《逆向工程核心原理》p391 37.1.5 2.虽然前四个参数由寄存器存储,但是栈仍然预留了32个字节的空间。具体预留多少个栈空间由调用者约定,而将寄
调试错误 由于函数的调用约定造成的错误
摘要:当你在调试中遇到 Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function de
Windows编程中,Zw、Ke、Nt开头的函数代表什么
摘要:这些都代表着是Windows native(原生)系统服务(system services)例程(routines)。Ke - kernel的缩写,代表的是内核模式的API接口。Nt - Windows New Technology的缩写,代表的是Windows 系统服务功能API接口。 大部分以N
vs2010静态生成exe
摘要:编译方式: 第1种: 设置:1、项目->配置属性->常规->MFC的使用:在静态库中使用MFC2、项目 -> 配置属性->C/C++->代码生成->运行库 :选择 多线程调试(/MTd)。 编译时,选择的是debug,win32然后执行编译生成方案,在该工程目录下的debug文件中,找到该.exe文