court-baron

封装已经存在,都没有错。但是提示“**PART* ascii 数据行格式不正确”

其实原因很简单,打开asc文件。会发现,报错的地方字符串存在” “。可以手动修改了,或者在原理图里做修改,重新导出。

注意:很多时候是在导出的时候,选择生成了{Value},value中经常包括空格,不导出此项即可。

 

STM32HAL库_BUG_使用USB收发一段时间,有概率出现无法收到数据

使用STM32CubeMX配置的工程,在频繁收发一段数据后出现,单片机无法再次接收收据。并且是不规律性出现,有时短有时运行时间长。

怀疑库BUG比较多。之前CAN总线、串口通信都遇到过坑。首先分析库代码/

分析库中的中断处理逻辑,发现如下代码:

跟进去,发现如下代码,根据以往经验。

(过去调试CAN总线,它会先HAL_LOCK锁住设备。但是,一旦通信频率过高信号线干扰收到错误数据过多,会进入另外一段逻辑,但是由于库设计bug并没有出现__HAL_UNLOCK,导致CAN总线废掉。不明白的伙伴可以看下,__HAL_LOCK定义,如果之前已锁住则直接return。当时坑了我好久,分析库才发现是BUG。这里不再展示代码,工程做过好久了,我是直接把库修改了。)

这里这个__HAL_LOCK(hpcd); 需要屏蔽调,不要让它判断并锁住设备。因为__HAL_LOCK(hpcd)里面有判断如果设备之前已经锁住,则直接return HAL_BUSY;函数就跳出了。具体是什么状况导致,之前已经锁住,我懒得去分析代码了,总之问题解决。有兴趣的大家可以去分析下。

/liutao.space

303-986-8936

如果DLL注入一直无法注入,注入失败。

可能是DLL中存在错误。可以跟踪注入的过程,并跟踪DLL中DllMain()函数的运行情况。有无崩溃出错的情况。

6205384682

由于东西较老,网上资料较少。而且大部分都是以War3,魔兽争霸显示文字为例。使用过程中,发现适用于War3的方式,并不适用于一些其它使用d3d8.dll的游戏。网上War3的具体自行百度。

大体流程是:

注入Dll,hook住LoadLibrary,然后等待判断d3d8.dll的加载,然后hook住Direct3DCreate8,之后再获得虚函数表地址,然后根据偏移hook需要的函数。

亲测试,在war3下此思路确实有效。并且成功实现了文字和图片的显示。

我尝试在Present函数中刷图,但是偏移搜索不到,自行写了个软件调试了下,得到偏移15*4 = 0x3C。实践中发现Present、EndScene中均可有效。

又测试了下其它的使用D3D8的游戏发现,代码工作没有效果。

使用OD调试,查找“当前模块中的名称”(Ctrl+N)发现:

已经有d3d8.Direct3DCreate8的函数地址。这时就修改代码,不用LoadLibrary然后再hook了。分析保存函数地址的基址,直接hook Direct3DCreate8函数地址。后面代码,就和之前的一致即可。

附上两个源代码:

1.hook war3显示文字图片

2.直接hook Direct3DCreate8地址的代码

 

VC++控制台程序报 error LNK1104: 无法打开文件“libci.lib”

在VS2013中新建了一个控制台程序,编译过程中遇到:

错误 1 error LNK1104: 无法打开文件“libci.lib”

因为libci是旧iostream库,解决办法是在

工程右键属性 –> 配置属性 –> 链接器 –> 命令行 –>

添加:/nodefaultlib:libci

在XP系统下调用OpenProcess()函数失败,权限问题

VS2008 + XP系统

调用OpenProcess()一直不成功,测试Win7下正常,估计是权限问题。

在网上搜到相关代码,添加成功解决!!

/————————声明提权函数——————————–
bool EnablePrivilege(LPCTSTR pszPrivName, bool fEnable )
{
bool fOk = false;
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) {

TOKEN_PRIVILEGES tp = { 1 };
/ 如果成功查找到特权值
if (LookupPrivilegeValue(NULL, pszPrivName, &tp.Privileges[0].Luid))
{
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
fOk = (GetLastError() == ERROR_SUCCESS);
}
CloseHandle(hToken);
}
return(fOk);
}
/————————–声明结束———————————-


在代码中调用,例如:

EnablePrivilege(“SeDebugPrivilege”,true);

在Visual Studio 2013建立 DirectX (june)2010工程配置内容

首先右键项目,打开属性页面

  • 在“配置属性” –> “常规”

修改“字符集”为:使用Unicode 字符集

  •  在“配置属性” –> “VC++目录” 

1. 可执行文件目录添加:

$(DXSDK_DIR)Utilities\bin\x86;$(DXSDK_DIR)Utilities\bin\x64;

2.包含目录添加:

$(DXSDK_DIR)Include;

3. 库目录添加:

$(DXSDK_DIR)Lib\x86;$(DXSDK_DIR)Lib\x64

  • 在“配置属性” –> “链接器” –> “输入” –> “附加依赖项”  根据需要添加如下:

d3d9.lib
d3dx10d.lib
d3dx9d.lib
dxerr.lib
dxguid.lib
winmm.lib
comctl32.lib

在Visual Studio 2013编译的C++代码遇到错误 error C2440: “初始化”: 无法从“const wchar_t [13]”转换为“LPCSTR”

经常在网上复制代码或者编译Samples,会遇到如题的报错:(error C2440: “初始化”: 无法从“const wchar_t [13]”转换为“LPCSTR”)

只需要在工程属性页面下,配置属性 –>  常规 –> 字符集 改成“使用Unicode 字符集” 即可。

 

Altium Designer 15\16 重新定义板子形状

Altium Designer 新版本中,在设计–>板子形状中 没有重新定义板子形状的选项。

可以在PCB界面下,按下1键切换,然后点击设计–>重新定义板子形状(快捷键D + R)

按下2键返回2D界面下。