- 博客(99)
- 资源 (16)
- 收藏
- 关注
原创 VS2019 驱动两个函数地址相同?
VS2019对于两个函数名不同,但是函数代码实现相同的情况,在链接时会将两个函数合并为同一个代码段,导致两个函数的地址相等。可以看出使用DEFINE_FUNC宏生成的FuncIndex_1和FuncIndex_2两个函数地址相等。注意:上面的实现方式,index必须要使用,否则仍然可能被链接优化为相同地址。那么要如何让两个函数地址不同呢?1.禁用链接选项:启用COMPAT折叠。2.让两个函数有不同代码。
2023-12-29 13:57:54
472
原创 UEFI+win7+多系统安装
(2)解压U盘sources\install.wim从中找到bootmgfw.efi改名拷贝到U盘EFI\boot\bootx64.efi,可参考https://www.cnblogs.com/xuliangxing/p/7649123.html。(1)从已安装的Win7系统下C:\Windows\Boot\EFI\bootmgfw.efi改名拷贝到U盘EFI\boot\bootx64.efi。物理主机先安装的Windows10,同时需要安装Windows7的双系统。(3)下载支持UEFI的安装镜像。
2023-08-11 14:02:45
1268
原创 Vmware+CentOS+KGDB内核双机调试
其中一台作为调试机,另一台则作为被调试机。如下图,CentOS7.9x64为被调试机,CentOS7.9x64-Debugger为调试机。
2023-07-20 15:38:49
1014
原创 Ubuntu18编译内核源码,并调整版本号
默认情况下,上面的命令会下载最后一个系统补丁版本,比如:4.15.0-212-generic。编辑/etc/apt/source.list,注释掉跟bionic-updates相关的源。下载ubuntu18 4.15.0-20-generic内核源码,默认情况下编译的内核版本会是4.15.17,我们需要调整版本号跟系统默认的一致,即4.15.0-20-generic。安装成功路径为/usr/src/,解压压缩包:tar -jxvf linux-source-4.15.0.tar.bz2。
2023-06-16 10:19:14
1302
原创 CentOS 32位系统下载地址
CentOS2.x - 6.x 32位下载地址:Index of / (centos.org)CentOS7.x 32位下载地址:Index of /altarch (centos.org)
2022-12-29 13:45:31
2366
原创 VMware Workstation16/17安装CentOS7.9 32位卡住解决方法
在使用VMware 16/17一系列默认安装配置时,均无法正常安装CentOS7.9 32位。安装过程中,安装界面卡住,鼠标键盘均无法操作,键盘的Caps Lock和Scroll Lock双闪。由于VMware Workstation是兼容ESXi的,所以猜测只要将兼容性选择ESXi6.7也可以正常安装。果然是能够正常安装的,同时需要注意CPU个数需要设置为1,否则安装出来的系统,图形界面也会卡死。感觉像是挂载交换分区系统时,系统崩溃了。为了排查安装过程中出现何种错误,需要通过字符安装界面进行安装。
2022-12-29 10:26:16
4589
8
原创 shell遍历文件名含空格的目录
遍历普通目录(适用于文件/目录名中不含空格):for file in `ls -A /tmp/test/samples`do echo $filedone对于文件/目录名中含空格的情况,上面方法无法正常遍历,如下图目录的文件列表:使用上面的方法遍历结果,截图如下:很明显遍历的结果是不正确的,原因是因为shell中的分隔符默认是空格或制表符,由环境变量IFS指定。解决方法有两种第一种是更改IFS变量,以换号符作为for循环的分隔符:oldIFS=$IFSIF.
2021-12-12 16:33:10
3021
原创 Windows makecert生成代码签名证书
由于自2021年微软宣布弃用SHA-1算法的代码签名,而采用新的SHA-2算法代码签名。SHA-1 签名内容要停用 | Microsoft Docs同时代码签名证书颁发厂商也不再颁发SHA-1的证书。但由于部分Windows7系统(未开启自动升级),并不支持SHA-2代码签名机制(可安装系统补丁来解决此问题),使得使用SHA2证书签名的文件并不能通过Windows的校验机制,从而程序无法正常运行。另外针对内核代码,需要双证书签名,使用SHA-2证书和微软同时签名。开发者使用SHA-2证书签名内核后,
2021-09-12 16:19:24
4196
1
原创 Windows命令行双击获取管理员权限
@if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0@bcdedit >nul@if '%errorlevel%' NEQ '0' ( goto UACPrompt) else ( goto UACAdmin):UACPrompt@%1 start "" /B mshta vbscript:CreateObject("Shell.Applica...
2021-06-01 11:26:48
1381
原创 Linux sem_trywait实现sem_timedwait
sem_timedwait说明 int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout); 其中第2个参数struct timespec *abs_timeout要求为绝对时间,如果手动将系统时间往后修改会导致sem_timedwait长时间阻塞sem_trywait说明 int sem_trywait(sem_t *sem); sem_trywai...
2021-04-12 16:48:10
2096
原创 C/C++ Openssl API RSA加解密文件
生成私钥openssl genrsa -out prikey.pem 1024生成公钥openssl rsa -pubout -in prikey.pem-out pubkey.pem#include <stdio.h>#include <openssl/rsa.h>#include <openssl/pem.h>#include <openssl/err.h> const char *publicKey = "-----BEGIN P...
2021-04-12 16:14:25
484
原创 Linux segfault错误排查
Linux下一般情况程序出现段错误异常崩溃时,并不会产生core文件,此时可借助/var/log/messages中打印的错误信息进行排查。如下错误信息:segfault at 7f30beffe000 ip 00007f30c6eebda9 sp 00007f30a7ffc4a0 error 4 in libc-2.17.so[7f30c6e56000+1c3000]其中,异常在libc-2.17.so库中,00007f30beffe000为出错地址,7f30c6eebda9为指令地址,00007
2021-04-12 15:38:37
8590
6
原创 汇编参数传递
x86 32位程序通过栈传递参数,压栈顺序从右至左 x64 64位程序通过寄存器+栈传递参数,前6个参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9,第7个及以后的参数通过栈传递,压栈顺序从右至左...
2021-04-12 15:14:48
1236
原创 Linux sed处理变量中含有/
若需要传递变量给sed命令,需要将单引号替换使用双引号。比如:echo "dir = abc" | sed 's/\(^dir[ \t]\{0,\}=[ \t]\{0,\}\).\+$/\1${CaDir}/g'替换为echo "dir = abc" | sed "s/\(^dir[ \t]\{0,\}=[ \t]\{0,\}\).\+$/\1${CaDir}/g"由于/是sed命令格式中的特殊字符,所以如果遇到传入sed命令的变量中含有/,则需要转义正确做法:...
2020-08-12 11:08:34
1602
原创 生成GmSSL证书吊销列表
GmSSL生成国密证书请查看:GmSSL证书生成使用以下脚本来吊销相生成的证书:#!/bin/sh#Generate GM certificate crl file#Author : xiejianjun#Date : 2020-07-31CurPath=`dirname $(readlink -f $0)`GmsslRootPath=/projects/GmSSLGmsslBin=${GmsslRootPath}/apps/gmsslDemoCaDir=${GmsslRootPa
2020-08-04 11:29:32
530
3
原创 Hook Linux内核系统调用
百度搜索到Hook Linux内核系统调用的方式,通过修改系统调用表syscall_table相应的地址,查找syscall_table的方式主要有3种:通过查看/boot/System.map.*文件,从sys_close遍历到loops_per_jiffy来查找到syscall_table,代码如下: unsigned long **find_sys_call_table(void)...
2020-04-09 20:26:24
776
原创 GDB打印同名全局变量名不准确
有如下程序逻辑结构,主程序中调用两个动态库,动态库中,含有相同名字的全局变量,在后加载库的函数中,更改全局变量值,使用GDB查看时,值未更改。主程序代码如下:#include <stdio.h>#ifdef _WIN32#include <Windows.h>#else#include <dlfcn.h>#include <unistd...
2020-03-11 10:26:09
613
原创 GDB打印变量值不正确
最近在工作中遇到使用GDB查看调试版程序变量值不正确的问题,但是使用printf输出变量值是正确的,现象如下图:源码如下:#include <stdio.h>void func(int *p){ printf("p=%p\n", p); p = (int *)0x101; printf("p=%p\n", p);}...
2020-03-11 09:40:07
1278
原创 Openssl源码简要说明
openssl 源代码主要由eay 库、ssl 库、工具源码、范例源码以及测试源码组成。eay 库是基础的库函数,提供了很多功能。源代码放在crypto 目录下。包括如下内容:asn.1 DER 编码解码(crypto/asn1 目录),它包含了基本asn1 对象的编解码以及数字证书请求、数字证书、CRL 撤销列表以及PKCS8 等最基本的编解码函数。这些函数主要通过宏来实现。 抽象 IO(...
2019-12-16 11:40:09
420
原创 GmSSL编程实现gmtls协议C/S通信(非BIO版本)
参见GmSSL编程实现gmtls协议C/S通信(BIO版本)服务端:#include "openssl/bio.h" #include "openssl/ssl.h" #include "openssl/err.h" #include <string.h>#include <sys/types.h>#ifndef WIN32 #include...
2019-08-21 15:18:46
4263
20
原创 GmSSL编程实现gmtls协议C/S通信(BIO版本)
GmSSL实现gmtls协议时,服务端必须设置双证书(签名证书和加密证书)才能正常通信。如果服务端只使用单证书(加密证书),会出现如下错误:SSL routines:gmtls_construct_ske_sm2:internal error:ssl/statem/statem_gmtls.c:742签名证书和加密证书的生成可以使用TASSL开源项目中的Tassl_demo/mk_tls_ce...
2019-08-21 15:15:45
5256
3
翻译 tar文件格式解析
源文地址:http://www.fileformat.info/format/tar/corion.htmTAR是磁带存档程序 (tape archiver) 的首字母缩写。Unix Tar是将多个文件存储为未压缩的单个文档文件的程序。1.标准格式 单个tar文件包含多个记录,单个记录包含512个字节。虽然这种格式用于磁带上,但是也常用于其他媒体。 一个头记录代表单个归档...
2019-06-28 15:34:15
11731
原创 GmSSL证书生成及验证C/S通信双向认证
1.https://github.com/guanzhi/GmSSL下载源码,解压后到源码目录下执行以下命令: ./config make make install //必须安装,否则后续执行gmssl会因为打开openssl.cnf出错。gmssl内部处理问题2.证书生成准备: cd apps/demoCA/ mkdir certs crl newcerts priva...
2019-06-04 14:57:43
7934
14
原创 Linux内存管理回收机制
Linux内存管理回收机制1.Linux内存管理简介 Linux将所管理的内存划分为内存节点(node)、内存分区(zone)和页框(page)。1.1.内存节点(node) 依据CPU访问代价的不同来划分。多CPU环境下,本地和远端内存属于不同节点。1.2.内存分区(zone) 在内存节点上,划分多个不同分区:DMA、Normal和HighMemory(可选)。...
2019-04-19 15:01:21
3206
原创 Linux OOM-killer机制说明
1.什么是OOM-killeroom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存。通常oom_killer的触发流程是:进程A想要分配物理内存(通常是读写内存)->触发缺页异常->内核去分配物理内存->物理内存不足,触发OOM。1......
2019-04-15 09:52:46
4070
1
转载 Linux top命令字段说明
转载自:https://www.cnblogs.com/zhoug2020/p/6336453.htmlVIRT:virtual memory usage 虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:resident memory usage 常驻内存1、进...
2019-04-11 10:32:02
1437
原创 C/C++注册CTRL+C退出程序
#include <signal.h>static bool g_bStop = false;void inner_signal_handler(int signum){ g_bStop = true;}static void InnerRegisterSigaction(){ struct sigaction act; act.sa_handl...
2019-04-01 10:33:10
1810
原创 根据输入字符串,输出所有字符能组成的串(面试题)
比如输入"abc",得到abc, acb, bac, bca, cab, cba。代码如下: #include <stdio.h>#include <vector>using namespace std;void func(vector<char> &chList, vector<char> &travelList...
2018-09-06 14:38:22
608
原创 解决网络延迟200ms问题
最近在项目中引入了HPSocket网络框架,但是在测试过程中发现网络始终延迟200ms,最终查找到问题原因是未启用Socket的TCP_NODELAY。在以下地址也有相关的讨论:https://serverfault.com/questions/834326/questions-about-nagle-vs-delayed-ackTCP/IP协议中,无论发送多少数据,总是要在数据前面加上协...
2018-09-05 17:33:34
11655
原创 Windows内核进程创建和模块加载通知的先后顺序
Windows内核进程创建和退出通知主要通过调用PsSetCreateProcessNotifyRoutine或者PsSetCreateProcessNotifyRoutineEx来注册事件通知函数,在进程创建和退出时,系统会调用注册的事件通知函数;可执行模块加载通知调用PsSetLoadImageNotifyRoutine或PsSetLoadImageNotifyRoutineEx来注册事件通知...
2018-08-22 00:47:17
943
转载 WinDBG常用命令
条件断点 条件断点:断点指令 + “j(Excecute If-Else) 和 gc (Go from Conditional Breakpoint)” 形如:bp Address "j (Condition) 'OptionalCommands'; 'gc' "a.普通变量(非结构体) "j (poi(MyVar)>5) '';'gc'" 在代码...
2018-08-21 15:02:17
641
原创 opencv自动扣图代码实现
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <process.h>#include <windows.h>using namespace std;using namespace cv...
2018-08-01 00:22:32
2315
原创 Windows鼠标键盘(PS2)驱动框架
常用的鼠标类型:串口鼠标、PS/2鼠标、USB鼠标(HID)常用的键盘类型:串口键盘、PS/2鼠标、USB键盘(HID)非HID鼠标键盘(PS/2鼠标键盘)物理配置方式上图左边展示了键盘鼠标设备通过独立的控制器连接到系统总线。一种典型的配置由通过i8042控制器操作的PS/2类型键盘,和通过串口操作的串口鼠标组成。上图右边展示了键盘鼠标设备通过集成的键盘鼠标控制器连接到系统总线。一种典型的配置由通...
2018-05-24 13:57:54
8674
翻译 未能解决的外部符号:__security_cookie
英文原地址:查看原文编译环境:VS2010+WDK1.7+VisualDDK今天在编译Windows驱动时,出现"ntoskrnl.lib(loadcfg.obj) : error LNK2001: unresolved external symbol ___security_cookie"。解决方法:1.禁用VS的缓冲区安全检查,在项目属性C/C++下面的代码生成选项页配置成No
2017-04-14 14:00:46
755
Unix/Linux 下GCC使用详解手册 pdf格式
2010-02-26
Fedora 10 安装中文指南
2008-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人