标签: memory-address

如何读取调用堆栈?

我们在Windows 2003服务器上通过COM +运行本机C++应用程序.我最近从事件查看器中注意到它抛出异常,特别是C0000005异常,根据http://blogs.msdn.com/calvin_hsia/archive/2004/06/30/170344.aspx表示该过程试图写入不在其地址空间内的内存,即访问冲突.

事件查看器中的条目提供了一个调用堆栈:

LibFmwk!UTIL_GetDateFromLogByDayDirectory(char const*,class utilCDate&)+ 0xa26c LibFmwk!UTIL_GetDateFromLogByDayDirectory(char const*,class utilCDate&)+ 0x8af4 LibFmwk!UTIL_GetDateFromLogByDayDirectory(char const*,class utilCDate&)+ 0x13a1 LibFmwk!utilCLogController :: GetFLFInfoLevel(void )const + 0x1070 LibFmwk!utilCLogController :: GetFLFInfoLevel(void)const + 0x186

现在,我明白它给我的方法名称去看看,但我感觉每行末尾的地址(例如+ 0xa26c)试图指向我在该方法中的特定行或指令.

所以我的问题是:

  1. 有谁知道如何使用这个地址或调用堆栈中的任何其他信息来确定代码中的哪一行掉进去?
  2. 有没有我可以阅读的资源,以便更好地理解调用栈,
  3. 是否有任何免费软件/开源工具可以帮助分析调用堆栈,可能是通过附加到调试符号文件和/或二进制文件?

编辑:根据要求,这是似乎导致问题的方法:

BOOL UTIL_GetDateFromLogByDayDirectory(LPCSTR pszDir, utilCDate& oDate)
{
BOOL bRet = FALSE;

if ((pszDir[0] == '%') &&
    ::isdigit(pszDir[1]) && ::isdigit(pszDir[2]) &&
    ::isdigit(pszDir[3]) && ::isdigit(pszDir[4]) &&
    ::isdigit(pszDir[5]) && ::isdigit(pszDir[6]) &&
    ::isdigit(pszDir[7]) && ::isdigit(pszDir[8]) &&
    !pszDir[9])
{
    char acCopy[9];
    ::memcpy(acCopy, pszDir + 1, 8);
    acCopy[8] = '\0';

    int …
Run Code Online (Sandbox Code Playgroud)

winapi callstack native memory-address visual-c++

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

数组的内存地址 - Java

有人知道获取数组索引的内存地址吗?(如c)

java arrays memory-address

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

如何知道程序中每个变量的地址,指针,函数,函数的返回地址等?

我想检查我的代码的每一行的地址.我想知道:

  • 创建变量时,在哪个地址?
  • 创建函数时,在哪个地址?
  • 当一个函数返回时,那么在什么地址?

我在这里想做什么?使用dumpbin获取信息.

我期待什么?

fun main add:0x0000
var int i add:0x2496
var int j add:0x249A
Run Code Online (Sandbox Code Playgroud)

非常感谢正确解释的适当帮助.

c memory-address

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

打印变量(或指针)的内存位置

我想打印存储变量的位置.我谷歌它,我发现了这个:

int *p;
printf("memory location of ptr: %p\n",  (void *)p);
Run Code Online (Sandbox Code Playgroud)

如果我写这个,是不是?

printf("memory location of ptr: %p\n",  &p);
Run Code Online (Sandbox Code Playgroud)

我编译它,我没有得到任何错误或警告,但如果我把它们都放在程序中,这两个语句不会返回相同的值.

c variables pointers memory-address

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

变量地址

看看这段代码:

class Test
{
    //
};

Test TestAddress()
{
    Test test;
    cout << "Object Address in function: " << (int)&test << endl;
    return test;
}

int IntAddress()
{
    int test;
    cout << "Integer Address in function: " <<(int)&test << endl;
    return test;
}

int main() {

    int x = IntAddress();
    cout << "Integer Address in Main: " <<(int)&x << endl;

    Test object = TestAddress();
    cout << "Object Address in Main: " <<(int)&object << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

功能中的
整数地址:1076679252 …

c++ memory-address

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

std :: deque memory-address as array

我知道使用以下方法将矢量"转换"为c样式数组是合法的:

std:vector<char> v;
char *c = &v[0];
Run Code Online (Sandbox Code Playgroud)

对于std :: deque来说也是如此吗?

c++ arrays deque memory-address

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

从Go中的字符串访问内存地址?

在golang中,我可以从给定的字符串中打印内存地址的值吗?

例如,如果运行以下代码:

a := "A String"
fmt.Println(&a)
Run Code Online (Sandbox Code Playgroud)

它打印0x1040c108.

我怎么能得到一个字符串,0x1040c108并打印存储在内存中的字符串的值?就像是fmt.Println(*0x1040c108)

这可能吗?

pointers go memory-address

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

如何在C++中获取std :: string中元素的地址?

例如,我有以下字符串:

std::string s = "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

我想要的地址中最后一个元素的s'!'.

我尝试了以下代码,但它似乎没有输出我想要它.

std::cout << &s[s.length() - 1];
Run Code Online (Sandbox Code Playgroud)

那输出'!'不是它的地址,同样的情况发生s.back()

是因为格式化引起的std::cout或其他地方的问题?

基本上我想要一个函数,它输出字符串中最后一个(如果可能的话,第一个)元素的地址.

c++ arrays string memory-address

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

在指定地址显示16字节的内容(十六进制)

我正在尝试显示特定地址的内容,给定该地址的char*.到目前为止,我尝试使用以下实现来完成它

int mem_display(char *arguments) {
    int address = *arguments; 
    int* contents_pointer = (int*)address;
    int contents = *contents_pointer;
    printf("Address %p: contents %16x\n", contents_pointer, contents);              
}
Run Code Online (Sandbox Code Playgroud)

但我一直收到"分段错误(Core Dumped)"错误.我试图制作一个虚拟指针来测试

char foo = 6;  
char *bar = &foo;
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在

c c++ hex pointers memory-address

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

访问C#类中的变量是否从内存中读取整个类?

我对C#相当陌生,我有一个问题困扰了我一段时间。

当我学习C#时,我被告知一个类不应包含很多变量,因为那样一来,读取变量(或从中调用方法)会很慢。

有人告诉我,当我访问C#类中的变量时,它将从内存中读取整个类以读取变量数据,但这对我来说听起来很奇怪和错误。

例如,如果我有这个课:

public class Test
{
    public int toAccess; // 32 bit
    private byte someValue; // 8 bit
    private short anotherValue; // 16 bit
} 
Run Code Online (Sandbox Code Playgroud)

然后从main访问它:

public class MainClass
{
    private Test test;
    public MainClass(Test test)
    {
        this.test = test;
    }
    public static void Main(string[] args)
    {
        var main = new MainClass(new Test());
        Console.WriteLine(main.test.toAccess); // Would read all 56 bit of the class
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:确实如此吗?访问变量时是否读取了整个类?

c# memory oop class memory-address

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

标签 统计

memory-address ×10

c++ ×4

arrays ×3

c ×3

pointers ×3

c# ×1

callstack ×1

class ×1

deque ×1

go ×1

hex ×1

java ×1

memory ×1

native ×1

oop ×1

string ×1

variables ×1

visual-c++ ×1

winapi ×1