好吧,我正在研究别人的代码.他们做了很多这样的事情:
char description[256];
description[0]=0;
Run Code Online (Sandbox Code Playgroud)
我知道这会在字符数组的第一个位置放置\ 0.但这甚至是一种擦除字符串的安全方法吗?
视觉工作室也会报告内存泄漏,我几乎把这个完成与使用的字符串联系起来.
PS.是的我知道std :: string,是的,我使用它.这不是我的代码.
在对自己进行实验之后,我确信java代码的阻塞在防止反向代码工程方面并不安全.所以,我转而使用Launch4J将我的一个核心jar文件捆绑到一个EXE文件中.jar文件也包含主要的入口方法.这是否会再次保护代码逆向工程?
我在我正在编写的代码中发现了这一点,并认为这是我遇到的一些问题的原因.
在某处的标题中:
enum SpecificIndexes{
//snip
INVALID_INDEX = -1
};
Run Code Online (Sandbox Code Playgroud)
然后 - 初始化:
nextIndex = INVALID_INDEX;
Run Code Online (Sandbox Code Playgroud)
并使用
if(nextIndex != INVALID_INDEX)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
调试代码时,nextIndex中的值并没有完全显示(它们非常大),我发现它已声明:
unsigned int nextIndex;
Run Code Online (Sandbox Code Playgroud)
因此,对INVALID_INDEX的初始设置是使unsigned int下溢并将其设置为一个巨大的数字.我认为这是导致问题的原因,但是仔细观察,测试
if(nextIndex != INVALID_INDEX)
Run Code Online (Sandbox Code Playgroud)
行为正确,即,当nextIndex是"大+值"时,它从未执行if的主体.
它是否正确?这是怎么回事?枚举值是否被隐含地转换为与变量相同类型的unsigned int,因此以相同的方式包装?
干杯,
XAN
我在这里遇到的以下代码中几乎没有问题:
// RawDataToPrinter - sends binary data directly to a printer
//
// szPrinterName: NULL-terminated string specifying printer name
// lpData: Pointer to raw data bytes
// dwCount Length of lpData in bytes
//
// Returns: TRUE for success, FALSE for failure.
//
BOOL RawDataToPrinter(LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
BOOL bStatus = FALSE;
HANDLE hPrinter = NULL;
DOC_INFO_1 DocInfo;
DWORD dwJob = 0L;
DWORD dwBytesWritten = 0L;
// Open a handle to the printer.
bStatus = …Run Code Online (Sandbox Code Playgroud) c++ ×3
arrays ×1
c ×1
char ×1
comparison ×1
enums ×1
gmail ×1
integer ×1
java ×1
javascript ×1
launch4j ×1
printing ×1
string ×1
unsigned ×1
visual-c++ ×1