标签: memory-address

对 32 MB 字节可寻址存储器进行寻址需要多少个地址位?

我在之前的一份试卷中发现了这个问题,我不确定我是否得到了正确的答案。据我所知,2^15 是 32768,即 32 MB,所以答案可能是 15 位。但我想我在这里遗漏了一些东西?

memory byte bit memory-address

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

RE - IDA 查找函数偏移量

我刚刚开始进行逆向工程。

我创建了一个小型 C++ ConsoleApplication,并尝试通过注入的 DLL 调用 NewFunction。

void NewFunction()
{
    DWORD dwImageBase = (DWORD)GetModuleHandle(NULL);

    std::cout << "ImageBase: " << ToHex(dwImageBase) << std::endl;
    std::cout << "NewFunction: " << ToHex((DWORD)&NewFunction) << std::endl;
    std::cout << "Offset: " << ToHex((DWORD)&NewFunction - dwImageBase) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

ImageBase: F90000
NewFunction: FA111D
Offset: 1111D
Run Code Online (Sandbox Code Playgroud)

现在,当我使用注入的 DLL 调用 0xFA111D 时,它会按预期工作并再次打印。(DLL调用ImageBase + Offset)

但我不知道如何使用 IDA Pro 获取 NewFunction 的地址...

在国际开发协会中:

  • 该函数位于:0x4133F0
  • 图像库是:0x400000
  • 计算出的偏移量为:0x133F0

至少偏移量不应该是相同的吗?我在这里错过了一些重要的东西吗?

c++ reverse-engineering ida memory-address dll-injection

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

LLDB 在内存地址设置断点

我在 IDA Pro 中打开了一个可执行文件,并找到了我想要中断的位置,从文件开头的 0x3390 处。

如何在 lldb 中的内存地址、程序开始 + 0x3390 处设置断点。

我尝试过b s -a 0x3390,但它不起作用,我想是因为我需要实际地址,而不是偏移量。

ida memory-address lldb

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

从 Ada 中的地址 0x0 读取

我在裸板运行时上运行,从地址零读取数据是我软件中的一个有效用例。但是,运行时将地址 0x0 视为null,并在使用-O2. 代码在编译时按预期运行-O1

declare
  use System.Storage_Elements;
  type Byte_Array is array (Natural range 0 .. 3) of Interfaces.Unsigned_8;
  bytes : constant Byte_Array with Import, Convention => Ada, Address => To_Address(Integer_Address(16#00000000#));
begin
  -- Copy bytes to some other byte array in memory:
  other_bytes := bytes; -- Throws exception
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题?


我的平台详情:

  • Ravenscar 小尺寸运行时移植到 Arm Cortex M1
  • 在 Microsemi RTG4 FPGA 中实例化的软核处理器上运行

失败详情:

之前的代码在我的运行时在memcpys-memcop.adb. 代码复制在下面,并带有一条注释报告失败的行。我不确定抛出的实际异常。我所能看到的就是最后一次使用信息调用处理程序的机会s-memcop.adb:52,下面对此进行了评论。

 40    function memcpy
 41      (Dest …
Run Code Online (Sandbox Code Playgroud)

null arm ada memory-address armv6

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

将地址 int "i" 分配给指针 "p" 时 "p = &amp;i" 和 "*p = i" 之间有什么区别吗

我在我的 C 编程书中找到了这段代码:

int i = 42;
int *p;

p = &i;    // & is address of sign
*p = i;    // * is dereference sign
Run Code Online (Sandbox Code Playgroud)

"p = &i" 和 "*p = i" 之间有什么区别吗??使用这两个表达式时“p”会具有不同的特征吗???

编辑:因为这段代码只是试图解释指针的概念,它是不可运行的......所以这两个赋值的顺序在这种情况下是不相关的......抱歉让事情变得模糊......

c pointers memory-address

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

CS:IP对应的物理地址在8086中超过20位会怎样?

在 8086 微处理器中,假设 CS 为 FFFFH,IP 为 FAB0H,那么物理内存地址将通过将 CS 乘以 16 并加上 IP 来计算。ie Add = FFFF0 + FAB0 这个总和会导致溢出,因为总和不能存储在 20 位中。会发生什么?

x86 intel real-mode memory-address x86-16

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

如何以随机顺序调用方法(Java JDK11)?

class Scratch {

    public void meth1(){

    }
    public void meth2(){

    }
    public void meth3(){

    }
    public void meth4(){

    }
    public void meth5(){

    }
    public static void main(String[] args) {
        int randomNumber=(int)Math.random()*5;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里我有5个方法,我想随机调用它们。我是 OOP 的新手,但对 C 有点了解,在这种情况下,我会将函数(方法)的地址存储在一个数组中,在 [0,4] 之间生成一个随机数并使用数组调用函数随机顺序。但是在Java中,我不知道如何获取方法的内存地址。我该怎么做?

java methods pointers memory-address java-11

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

为什么 C 数组元素(貌似)存储在 4 个块中?

我正在学习 C 语言并了解指针。据我了解,当您声明一个数组时,该数组的地址是该数组中第一个元素的地址。所有其他元素都连续存储在内存中。

当我使用onlinegdb.com 上的在线 C 编译器运行此代码时...

int main()
{
    int num[5] = { 0, 1, 2, 3, 4 };

    for (i = 0; i < 5; i++) {
        printf("num[%d] has the value %d and is stored at address %p\n",
               i, num[i], &num[i]);
    }

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

我观察到以下情况...

num[0] has the value 0 and is stored at address 0x7ffe9973e600
num[1] has the value 1 and is stored at address 0x7ffe9973e604
num[2] has the value 2 and is stored at …
Run Code Online (Sandbox Code Playgroud)

c memory arrays memory-address

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

aarch64 是否有不可缓存(=缓存旁路)加载或存储指令?

在sparc架构中,有一个ASI(地址空间指示符)被传递给加载、存储指令,因此如果ASI为0x20,则像IO访问一样绕过缓存。即使内存范围在页表中设置为可缓存,缓存也会被绕过。这有时非常方便,例如使用变量在核心之间进行同步等
。aarch64 架构中有类似的东西吗?我查看了指令内容,但在加载/存储指令列表中找不到任何内容。

assembly arm memory-address cpu-cache arm64

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

为什么取消引用地址会在 golang 中产生“无效的间接”错误?

type person struct{
  Name string
  Age int
}

// parameters : (pointer to person struct), which is basically address of person object
func printPerson(p *person) {

  // when we add '*' to a address, then it becomes dereferencing, Hence 
  // I read "*p.Name" as "person object dot Name" and i expect it to give value,
  // I get this error:
  // ./prog.go:20:15: invalid indirect of p.Name (type string)
  // ./prog.go:20:24: invalid indirect of p.Age (type int)
  fmt.Println(*p.Name, *p.Age) // does …
Run Code Online (Sandbox Code Playgroud)

pointers go memory-address dereference

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