小编Rag*_*geD的帖子

无法调试共享库 - 符号未正确加载

我目前正在写一个小型库,我想检查它是否有泄漏(除其他外); 但是,由于某种原因,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)

c++ debugging gdb shared-libraries debug-symbols

13
推荐指数
1
解决办法
1万
查看次数

理解C++中的自删除程序

有一个自删除程序

#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)

c++ winapi

8
推荐指数
1
解决办法
5134
查看次数

当使用Winsock读取所有信息时,结束"recv()"循环

我在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

谢谢

c++ windows winapi winsock recv

6
推荐指数
1
解决办法
6428
查看次数

有没有办法在头文件中声明指针并在.cpp中实例化它?

正如我的问题所示:有没有办法在头文件中声明指针并在.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个未解决的外部因素

c++ pointers

3
推荐指数
1
解决办法
3269
查看次数

BufferedReader.readLine()破坏了二进制文件

出于学术目的,我正在使用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()无论如何都使用),我不能简单地以字节的形式读取所有内容.但是,无论如何要解决这个问题?因为我想要整行,但我也想从这一行中提取二进制文件.

另外,我也尝试过直接转换 …

java binary

3
推荐指数
1
解决办法
3811
查看次数

C++或C++ 0x - 哪个标准更好?

所以我一直在尝试做一些研究,并希望其他开发人员就此主题发表意见.我是一位经验丰富的C++程序员,并且已经使用了当前的C++标准.我一直在阅读"C++ 0x无疑将成为新标准"的文章.从切换到全新的编程标准,我们每个人都想到了多远?另外,在你看来,这是一个更好的标准?根据我的理解,C++ 0x将附带更多的标准库,使开发更容易,没有更多的依赖.请帮我赶上!

谢谢!
丹尼斯·M

c++ c++11

2
推荐指数
2
解决办法
374
查看次数

向对话框添加菜单资源

我想知道是否可以将菜单资源添加到对话框中。在多个对话框而不是标准窗口中“设计”我的应用程序布局会更容易,但是,我需要能够添加一个菜单。我最好能够通过资源定义的菜单来执行此操作,但是,我不反对以编程方式执行此操作。

现在我的应用程序是这样开始的:

DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_UPDATE),NULL,(DLGPROC)updateTitle);
Run Code Online (Sandbox Code Playgroud)

在主函数中。

谢谢你的帮助!
丹尼斯 M。

c++ windows resources winapi

2
推荐指数
1
解决办法
3325
查看次数

要键入的指针数组

由于我的车坏了,我今天错过了我的课.类型的指针数组是否类似于以下内容?

void *ary[10];
ary[0] = new int();
ary[1] = new float();
Run Code Online (Sandbox Code Playgroud)

我仍然有点模糊它是什么.

c c++ arrays types pointers

1
推荐指数
1
解决办法
250
查看次数