我的问题是:如何在python中读取内存地址的内容?示例:ptr = id(7)我想读取ptr指向的内存内容.谢谢.
int t[10];
int * u = t;
cout << t << " " << &t << endl;
cout << u << " " << &u << endl;
Run Code Online (Sandbox Code Playgroud)
输出:
0045FB88 0045FB88
0045FB88 0045FB7C
Run Code Online (Sandbox Code Playgroud)
输出u是有道理的.
我理解t并且&t[0]应该具有相同的价值,但是怎么样&t也一样?实际意味着什么?
鉴于函数原型及其在内存中的地址的知识,是否可以从另一个进程或一些只知道原型和内存地址的代码调用此函数?如果可能,如何在代码中处理返回的类型?
如何在C++中获取成员函数的绝对地址?(我需要这个用于thunking.)
成员函数指针不起作用,因为我无法将它们转换为绝对地址(void *) - 我需要知道内存中实际函数的地址,而不仅仅是相对于类型的地址.
在Bjarne Stroustrup的书“ C ++编程语言(第4版)”中,第110页。267(第10.4.5节“地址常量表达式”)中,他使用了一个代码示例,其中将局部变量的地址设置为constexpr变量。我以为这看起来很奇怪,所以我尝试使用g ++ 7.3.0版运行示例,但无法获得相同的结果。这是他的逐字代码示例(尽管略有删节):
extern char glob;
void f(char loc) {
constexpr const char* p0 = &glob; // OK: &glob's is a constant
constexpr const char* p2 = &loc; // OK: &loc is constant in its scope
}
Run Code Online (Sandbox Code Playgroud)
运行此命令时,我得到:
error: ‘(const char*)(& loc)’ is not a constant expression
Run Code Online (Sandbox Code Playgroud)
g ++发生了我不知道的事情,还是Bjarne的示例有更多事情?
我想检查变量的地址
volatile int clock;
cout << &clock;
Run Code Online (Sandbox Code Playgroud)
但它总是说x在地址1.我做错了什么?
0040103A CALL DWORD PTR DS:[40207A] USER32.MessageBoxA
Run Code Online (Sandbox Code Playgroud)
什么DS:意思?
我的代码是:
#include <stdio.h>
#include <string.h>
void main()
{
char string[10];
int A = -73;
unsigned int B = 31337;
strcpy(string, "sample");
// printing with different formats
printf("[A] Dec: %d, Hex: %x, Unsigned: %u\n", A,A,A);
printf("[B] Dec: %d, Hex: %x, Unsigned: %u\n", B,B,B);
printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'\n", B,B,B);
// Example of unary address operator (dereferencing) and a %x
// format string
printf("variable A is at address: %08x\n", &A);
Run Code Online (Sandbox Code Playgroud)
我在linux mint中使用终端编译,当我尝试使用gcc编译时,我收到以下错误消息:
basicStringFormatting.c: In function ‘main’:
basicStringFormatting.c:18:2: warning: …Run Code Online (Sandbox Code Playgroud) 给定一个非连续的STL容器(您也可以考虑boost::unordered_map并boost::multi_index_container考虑),如果没有删除任何元素,是否保证容器内元素的内存地址永远不会改变(但是可以添加新的容器)?
例如
class ABC { };
//
//...
//
std::list<ABC> abclist;
ABC abc;
abclist.insert(abc);
ABC * abc_ptr = &(*abclist.begin());
Run Code Online (Sandbox Code Playgroud)
在其他的字将abc_ptr被指出abc在整个执行,如果我不删除abc的abc_list.
我问这个是因为我要用ABCC++/Cli ABC包装类,所以我需要指向包装类中的实例的指针.ABC是一个简单的类,我希望容器处理内存.如果答案是否定的话我将使用std::list<ABC*>.
出于调试目的,我需要测试指针以查看它是否指向有效的可读页面.目前我正在解析/ proc/[pid]/maps以查看地址是否映射好,但这看起来有点啰嗦.有没有更好的办法?谢谢.