标签: memory-address

在IBM Z(s390x)上超过4K(页面大小)的指令如何以基址+偏移量方式寻址?

我们知道每条指令都转换为基址+偏移量,并且偏移量最大大小设置为4K(4096)。如果我的程序大小超过 4k 怎么办?

Line 1 : Base  + 1 , 
Line 2 : Base  + 5 , 
.
.
.
., 
Line x : base + 4090 
Run Code Online (Sandbox Code Playgroud)

当指令超出页面大小 4096 时,如何对第 x 行开始进行寻址(如基址 + 偏移量)?

从 X 行开始的指令是如何组装的?我们是否需要将基地址更改为保存指令的下一页的开头?

assembly mainframe memory-address zos s390x

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

如何创建一个新列表指向其他地方,Lisp

标题是不言自明的.如何从另一个列表Y(相同的结构)构建一个新的列表X,但结果列表指向内存区域的其他位置,实际上是另一个对象?我尝试使用make-list :initial-element Y或附加到空列表,但我仍然得到相同的对象.谢谢!

lisp memory pointers list memory-address

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

如何找到字符串的内存地址?

我有精神障碍,我知道我应该知道这一点,但我需要一些帮助.

如果我声明一个像这样的字符串变量:

    string word = "Hello";
Run Code Online (Sandbox Code Playgroud)

如何找到"Hello"的内存地址?

编辑:这就是我想要做的......

编写一个函数,它接受一个参数,一个字符串的地址,并打印该字符串一次.(注意:您需要使用指针来完成此部分.)

但是,如果提供了第二个参数,类型为int,并且非零,则该函数应该打印该字符串的次数等于该点处调用该函数的次数.(请注意,打印字符串的次数不等于第二个参数的值;它等于到目前为止调用函数的次数.)

c++ string memory-address

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

在带有SOS的WinDbg中查找静态字段的地址

我无法弄清楚如何使用带有SOS的WinDBG来获取静态.NET类成员的地址.给定这样的输入程序:

namespace windg_static_test
{
    class StaticTest
    {
        public static bool static_bool_field = true;
        public void show_and_set()
        {
            while (static_bool_field)
            {
                Console.WriteLine("static_bool_field = " + static_bool_field + "\nEnter new value: ");
                static_bool_field = Console.ReadLine()[0] == '0' ? false : true;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            StaticTest st = new StaticTest();
            st.show_and_set();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用!name2ee找到EEClass,我可以使用!dumpclass w/name2ee值查看值.

0:004> !dumpclass 1c12e0
Class Name:      windg_static_test.StaticTest
mdToken:         02000002
File:            C:\Develop\Projects\windg static test\bin\Release\windg static test.exe
Parent Class:    64f84920
Module:          001c2e94 …
Run Code Online (Sandbox Code Playgroud)

.net static windbg sos memory-address

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

C++ - 如何在lldb/Xcode中获取std :: vector对象的地址

我有一个堆栈分配std::vector被一些流氓代码覆盖.它不是被覆盖的数据,而是内部状态.我知道这是因为size()成员函数会在程序中返回垃圾值一段时间.它正确初始化.我怀疑代码中的其他地方有一个常见的指针错误.

我正在使用Xcode 4.6.2.我想在内存访问向量的第一个内存位置(向量本身,而不是数据)时设置硬件断点(使用lldb),所以我可以看到覆盖它的内容.根据这个我需要先找到矢量的地址.通常会使用&运算符来获取变量的地址,但由于某种原因,使用lldb这不会返回地址,而是打印某种类型的汇总字符串.

class myClass {
 public:
  myClass() : myVector(4) {}
 private:
  std::vector<double> myVector;
  double myDouble;
};
Run Code Online (Sandbox Code Playgroud)

在构造完所有内容后,在任意断点处断开之后:

(lldb) frame variable &myObject.myVector
(std::vector<double, std::allocator<double> > *) $7 = size=4
Run Code Online (Sandbox Code Playgroud)

'expr'具有相同的结果:

(lldb) expr &myObject.myVector;
(std::vector<double, std::allocator<double> > *) $8 = size=4
Run Code Online (Sandbox Code Playgroud)

通常我希望看到打印的地址,例如使用此普通数据成员:

(lldb) frame variable &myObject.myDouble
(double *) &myDouble = 0x0000000125589328
Run Code Online (Sandbox Code Playgroud)

我尝试使用'expr'将地址分配给变量,但这也不起作用:

(lldb) expr std::vector<double, std::allocator<double> > * f = &myObject.myVector; f
(std::vector<double, std::allocator<double> > *) $12 …
Run Code Online (Sandbox Code Playgroud)

c++ debugging xcode memory-address lldb

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

是否保证数组的元素从较低地址到较高地址存储?

假设我有以下数组:

int list[3]={2,8,9};
printf("%p,%p,%p",(void*)&list[0],(void*)&list[1],(void*)&list[2]);
Run Code Online (Sandbox Code Playgroud)

是否始终保证&list [0] <&list [1] <&list [2]

在使用C时我曾经认为它是一个严格而快速的规则,但现在必须非常肯定它作为一个OP只是在我回答他的问题时问我这个问题. endianness

小端或大端

什么让我第二个想法是问题.stacks can grow up or down我不是很确定,所以你的严谨答案是值得赞赏的.谢谢.

c arrays stack memory-address

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

NASM中本地标签的地址是什么?

NASM汇编器中,可以使用.前缀声明本地标签。

  1. 那么,本地标签(以及所有汇编程序中的标签)的地址是什么?它是相对的还是绝对的,或者取决于使用情况?

我问是因为有些功能使我感到困惑。这是一个示例代码:

ORG 0x400000 ;origin of address for labels

start:       ;address here should be 0x400000
.....        ;some code here

     .loop   ;local label
     .....   ;some code here
     jmp short .loop ;<------- address is not taken as absolute
     jmp short start
Run Code Online (Sandbox Code Playgroud)

如果我使用一些普通标签(如start)进行引用,并将其与lea指令一起使用,则地址将被视为相对于原点的普通绝对地址。

  1. 但是,如果我带上标签并与之一起使用short(如最后一行所示),会发生什么情况?是否从绝对地址计算出跳转的偏移量?

我之所以这么问,是因为我的代码中有本地标签(.LNXYZ,是随机生成的),并且需要列出地址列表(从这些标签中),该地址列表将包含4字节的元素,其中包含用于跳转的绝对地址。这样有可能吗,还是我必须使用普通标签?有任何指令吗?

x86 assembly nasm memory-address

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

为什么static_cast为同一个对象提供不同的内存位置?

我的代码

class Parent { int a; };
class Child { int b; };
struct GrandChild : public Parent, public Child { int a, b, c; };

int main() {
    GrandChild GC;
    std::cout << "GrandChild's address is at : " <<&GC<<endl;
    std::cout << "Child's address is at : " <<static_cast<Child*>(&GC)<<endl;
    std::cout << "Parent's address is at : " <<static_cast<Parent*>(&GC)<<endl;

}
Run Code Online (Sandbox Code Playgroud)

输出:

GrandChild's address is at : 0077F6F8
Child's address is at : 0077F6FC
Parent's address is at : 0077F6F8
Run Code Online (Sandbox Code Playgroud)

为什么在static_cast之后内存位置有如上所述的不一致?

c++ inheritance static-cast memory-address

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

必须将整数存储在连续的内存地址中吗?

首先,我在谈论32位架构.我的教授给了我们一个例子,说明如何存储C/C++ 32位整数的地址,并且有一个地址,就像0A0B0C0D整数的第一个字节存储在0x0A,第二个at 0x0B,第三个at 0x0C和第四个at 0x0D.但是,我在C++中尝试了以下代码:

#include <iostream>
int main(){
  int a = 5;
  std::cout << &a;
}
Run Code Online (Sandbox Code Playgroud)

和我0x7fffba2e6c3c.但是,这看起来像字节是连续的,就像教授给我们的例子一样.我的问题是,为什么编译器不将整数的4个字节存储在连续的内存地址中,而不是将整数中的每个字节存储在不同的地址中?

c++ memory memory-address

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

取字面的地址,而不是'constexpr`

严格按照C++ 14的规则,至少cppreference.com给出的规则,不是第(1)行是一个常量表达式吗?

constexpr const int* addr(const int& ir) { return &ir; }
constexpr const int* tp = addr(5); // (1)
Run Code Online (Sandbox Code Playgroud)

确实,它不是地址常量表达式,因为&ir它不是静态对象&ir的地址(在此上下文中是临时的地址,在编译时无法知道).

但它是一个核心常量表达式,因为它不违反任何后面列出的核心常量表达式规则,它没有关于获取对象地址的后续规则.

c++ memory-address constexpr c++14

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