相关疑难解决方法(0)

符号etext,edata和end定义在哪里?

这是来自Linux手册页的代码:

#include <stdio.h>
#include <stdlib.h>

extern char etext, edata, end;

int main() {
    printf("First address past:\n");
    printf("    program text (etext)      %10p\n", &etext);
    printf("    initialized data (edata)  %10p\n", &edata);
    printf("    uninitialized data (end)  %10p\n", &end);

    exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

运行时,下面的程序产生如下输出:

$ ./a.out
First address past:
    program text (etext)       0x8048568
    initialized data (edata)   0x804a01c
    uninitialized data (end)   0x804a024
Run Code Online (Sandbox Code Playgroud)

在哪里etext,edata end界定?如何为这些符号赋值?它是由链接器还是别的?

c linker gcc ld

17
推荐指数
3
解决办法
7068
查看次数

如何确定进程是32位还是64位?

给定Windows进程句柄,如何使用C++代码确定进程是32位还是64位?

c++ windows winapi 32bit-64bit

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

如何在C++中获取进程的起始/基址?

我在微软的Spider Solitaire上使用它来测试整个基本/静态指针.所以我得到了玩家使用的"移动"量的基本指针,并且作弊引擎告诉我它是"SpiderSolitaire.exe + B5F78".所以现在我不知道如何弄清楚SpiderSolitaire.exe的起始地址是什么(当然每次程序启动时这都会改变).如何找到SpiderSolitaire.exe的起始地址,以便我可以添加偏移量并获取"移动"值的实际地址(当然是用c ++)?

c++ memory windows process base-address

6
推荐指数
2
解决办法
3万
查看次数

场景:DLL中的全局变量,由多线程应用程序使用

几个月前,我遇到了一个人(在orkut上)提出的有趣场景.虽然,我已经想出了一个解决这个问题的"非便携式"解决方案(用小代码测试过),但仍然想知道你们要说些什么并提出建议.

假设,我创建了一个DLL,导出一些用C++编写的功能,用于单线程客户端.这个DLL声明了很多全局变量,有些可能是const变量(只读)而其他变量是可修改的.

无论如何,后来的事情发生了变化,现在我想让同一个DLL与多线程应用程序一起工作(不修改DLL); 这意味着,几个线程从DLL访问函数和全局变量,并修改它们等等.所有这些都可能导致全局变量保持不一致的值.

所以问题是,

我们可以在客户端代码中做些什么来阻止DLL的多次访问,同时确保每个线程在它自己的上下文中运行(意味着,当它访问DLL时,DLL的全局值与它之前)?

c++ multithreading mutex global-variables critical-section

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

如何将变量放置在内存中的给定绝对地址处(使用 Visual C++)

我怎么能告诉静态的Visual C ++放置一个全局变量在内存中的一个给定的绝对地址,像什么__attribute__((at(address)))

c++ portable-executable visual-c++

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

有没有办法将第三方DLL中的静态变量重置为原始值?

我们必须在开发过程中使用第三方DLL,遗憾的是我们无法修改它或指定库必须如何工作.

原始库开发人员通过静态变量在他们的方法中引入了状态机制.

例如:

void foo()
{
 static int a = 1;
 if (a == 1)
 {
  /* some init logic */
  a = 2;
 } 
}
Run Code Online (Sandbox Code Playgroud)

有时我们需要将库带到其原始状态.

有没有办法将静态变量重置为原始值而没有任何系统"黑客"?

我们当前的解决方案是FreeLibrary/LoadLibrary,但我们想避免它.

c++ winapi

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

如何在运行时获取数据和bss地址空间(在Unix C程序中)

我需要在运行时获取数据段的bss和数据部分的地址空间.我需要每个部分的开始和结束地址.

c unix

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