我目前正在写一个小型库,我想检查它是否有泄漏(除其他外); 但是,由于某种原因,gdb没有加载库符号.我已经在这里阅读了许多其他帖子(以及互联网上的其他各个地方),但是,我似乎无法找到解决方案.这是正在发生的事情:
我正在使用以下标志编译共享库(这些标志包含在最终的共享库以及所有目标文件中):
CFLAGS=-Wall -O0 -g -fPIC
Run Code Online (Sandbox Code Playgroud)
同样,我正在编译二进制文件memtest(库的客户端应用程序)以检查内存泄漏等,并使用这些标志
CFLAGS=-Wall -O0 -g
Run Code Online (Sandbox Code Playgroud)
现在,我将一个NULL指针插入到库中以测试我是否可以跟踪它并"调试"指针(即它使它崩溃).所以我尝试通过gdb运行它,但这是不行的.info sharedlibrary可执行文件和核心的输出相同:
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
... Some libraries I am not worried about debugging...
0x00d37340 0x00d423a4 Yes (*) /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0 <--- My lib
.... and some more....
(*): Shared library is missing debugging information.
Run Code Online (Sandbox Code Playgroud)
如您所见,它没有加载调试信息.我不确定为什么会这样.我用-g旗子构建并连接了所有东西,我甚至尝试过-ggdb,-g3但似乎没有任何东西可以正常工作.当我加载核心转储时,这就是我所看到的:
...some libs...
Reading symbols from /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0...done.
Loaded symbols for /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0
Reading symbols from /usr/lib/libstdc++.so.6...(no debugging symbols …Run Code Online (Sandbox Code Playgroud) 有一个自删除程序
#include <windows.h>
#include <stdio.h>
void main(int argc, char* argv[])
{
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof(si);
if (argc == 1)
{
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
CopyFile(argv[0], "1.exe", FALSE);
MoveFile(argv[0], "2.exe");
CreateFile("1.exe", 0, FILE_SHARE_READ, &sa,
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL);
CreateProcess(NULL, "1.exe x", NULL, NULL,
TRUE, 0, NULL, NULL, &si, &pi);
}
else if (argc == 2)
{
while(!DeleteFile("2.exe"));
CreateProcess(NULL, "net", NULL, NULL, TRUE,
DEBUG_ONLY_THIS_PROCESS, NULL, NULL, &si, &pi);
} …Run Code Online (Sandbox Code Playgroud) 我在winsock的recv()循环中遇到了问题.我试图在iResult == 0时终止循环,但是,循环仅在套接字关闭时结束.它似乎挂在最后一个recv(),其中iResult等于0.那么有关如何有效终止循环的任何想法?我的最终目标(无论iResult是否= 0;或许我的方法是错误的)是在读取所有发送的信息时停止循环.这是循环.
do
{
iResult = recv(socket, recvbuf, BUFLEN-1, 0);
if(iResult > 0){
// Null byte :)
// Remove that garbage >:(
recvbuf[iResult] = '\0';
printf("Recvbuf: %s\n\n\niResult: %d\n",recvbuf,iResult);
continue; // working properly
}
else if(iResult == 0)
// Connection closed properly
break;
else
{
printf("ERROR! %ld",WSAGetLastError());
break;
}
} while(iResult > 0);
Run Code Online (Sandbox Code Playgroud)
就像我说的,我收到的所有数据,我都无法退出循环.下一步是将数据写回服务器,但它会挂起,直到ping超时.套接字是SOCK_STREAM,BUFLEN定义为0x200
谢谢
正如我的问题所示:有没有办法在头文件中声明指针并在.cpp中实例化它?
到目前为止我有这个:
.H:
FILE* stream;
Run Code Online (Sandbox Code Playgroud)
的.cpp
stream = fopen("com2", "r");
Run Code Online (Sandbox Code Playgroud)
但这给了我这个错误:
1> gpsHandler.obj:错误LNK2001:未解析的外部符号"struct _iobuf*stream"(?stream @@ 3PAU_iobuf @@ A)1> C:\ Users***\portReading\Debug\portReading.exe:致命错误LNK1120: 1个未解决的外部因素
出于学术目的,我正在使用java和java加密技术开发基于加密的小型应用程序.也就是说,我通常使用C或C++(这很容易),所以我很抱歉这是一个明显的问题.所以,当我想要解密信息时,问题出现了.问题与使用加密或任何东西没有多大关系,但事实上,正确地检索我的初始化向量.现在我有一个明文文件,其格式为new-line /冒号(是的,这是不安全的,但这是一个学术练习 - 显然关键文件不会在现实世界的明文中)
password:salt:<IV>
Run Code Online (Sandbox Code Playgroud)
<IV>初始化向量在哪里.我决定直接以二进制格式写出初始化向量.现在我在这里是我的问题开始的地方.我可以正确地写出数据(使用hexdump验证),但它似乎没有被正确地读回到程序中.例如,考虑一个计数器值
00 18 C0 98 (decimal: 1622168)
Run Code Online (Sandbox Code Playgroud)
正确写出该值.但是,当我尝试读取它时,这个值都是错误的.我怀疑这是结果BufferedReader.readLine().我只是读取这一行并将其写入另一个文件,然后将该值更改为
BD EF BF BD (decimal: who cares, very wrong...)
Run Code Online (Sandbox Code Playgroud)
但是ASCII值(密码和盐)以及冒号分隔符保持不变.初始化向量二进制是所有被加扰的.
我想要做的是这样的:
BufferedReader reader = new BufferedReader(new FileReader(f));
String last = null;
String parse = null;
while((last = reader.readLine()) != null) {
parse = last;
}
reader.close();
int offset = // A few indexOf() statements to find the positon;
byte[] iv = parse.substring(offset).getBytes();
Run Code Online (Sandbox Code Playgroud)
此时,iv.length > 16(使用128位AES)已经错了.所以我不完全确定如何完成这种ASCII二进制混合(也许这是一个糟糕的设计开始).我的一部分问题是char != byte在Java中,如果我想读取一个完整的行(readLine()无论如何都使用),我不能简单地以字节的形式读取所有内容.但是,无论如何要解决这个问题?因为我想要整行,但我也想从这一行中提取二进制文件.
另外,我也尝试过直接转换 …
所以我一直在尝试做一些研究,并希望其他开发人员就此主题发表意见.我是一位经验丰富的C++程序员,并且已经使用了当前的C++标准.我一直在阅读"C++ 0x无疑将成为新标准"的文章.从切换到全新的编程标准,我们每个人都想到了多远?另外,在你看来,这是一个更好的标准?根据我的理解,C++ 0x将附带更多的标准库,使开发更容易,没有更多的依赖.请帮我赶上!
谢谢!
丹尼斯·M
我想知道是否可以将菜单资源添加到对话框中。在多个对话框而不是标准窗口中“设计”我的应用程序布局会更容易,但是,我需要能够添加一个菜单。我最好能够通过资源定义的菜单来执行此操作,但是,我不反对以编程方式执行此操作。
现在我的应用程序是这样开始的:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_UPDATE),NULL,(DLGPROC)updateTitle);
Run Code Online (Sandbox Code Playgroud)
在主函数中。
谢谢你的帮助!
丹尼斯 M。
由于我的车坏了,我今天错过了我的课.类型的指针数组是否类似于以下内容?
void *ary[10];
ary[0] = new int();
ary[1] = new float();
Run Code Online (Sandbox Code Playgroud)
我仍然有点模糊它是什么.