Linux kernel 手臂和手臂64(aarch64)的蹦床地址是什么?

Linux kernel 手臂和手臂64(aarch64)的蹦床地址是什么?,linux-kernel,arm,computer-architecture,Linux Kernel,Arm,Computer Architecture,我正在使用PTrace为ARM64编写一个基本的检查点机制,为此,我使用了cryopid中的一些代码,并发现了如下所示的TRAMPOLINE_ADDR宏: #define TRAMPOLINE_ADDR 0x00800000 /* 8MB mark */ for x86 #define TRAMPOLINE_ADDR 0x00300000 /* 3MB mark */ for x86_64 所以当我读到蹦床的时候,它和跳跃的说法有关。但我的问题是上述值来自何处,以及AR

我正在使用PTrace为ARM64编写一个基本的检查点机制,为此,我使用了cryopid中的一些代码,并发现了如下所示的TRAMPOLINE_ADDR宏:

#define TRAMPOLINE_ADDR     0x00800000   /* 8MB mark */ for x86
#define TRAMPOLINE_ADDR     0x00300000   /* 3MB mark */ for x86_64
所以当我读到蹦床的时候,它和跳跃的说法有关。但我的问题是上述值来自何处,以及ARM和ARM64平台的相应值是什么


谢谢

请阅读维基百科页面

蹦床或特定地址并没有什么神奇之处,任何可以执行代码的地址都可以容纳蹦床。例如,它们有许多用例

假设您正在启动一个闪存,一个spi闪存,以某种安全速率运行,以便芯片为所有用户启动。但是您希望提高spi闪存的速率,并且spi外围设备不允许您在执行代码时进行更改。因此,您可以将一些代码复制到ram中,该代码将spi闪存速率提高到更快的速率,这样您就可以更快地使用和/或运行闪存,然后从闪存中恢复运行。你已经从ram中的一点点代码中跳出来或蹦出来了

你有一个从闪存启动的芯片,但是有能力将地址空间重新映射到ram,例如,你将一些代码复制到其他ram,分支到它,一点点蹦床代码重新映射地址空间,然后将你反弹回来,或者将你反弹到闪存现在映射到的位置或其他任何地方

你会看到gnu链接器有时会添加一个小蹦床,比如你把一些模块编译成thumb,另一些编译成arm,你不必再使用交互功能,链接器会负责清理,它可能会添加一两条指令在模式之间蹦床,有时,它修改代码,使其只到达需要的地方;有时,它修改代码,将链接分支到某个靠近的地方,而某个靠近的地方是一个蹦床

我假设如果/当切换到该模式时,可能需要对aarch64执行相同的操作


所以不应该有魔法。您的特定应用程序可能有一个或多个蹦床,您感兴趣的应用程序甚至可能不会被称为蹦床,但可能是特定于应用程序的,绝对没有理由每个人都有一个地址,除非它是非常严格的操作特定的(再次称为“特定于应用程序”)该操作系统的一个特定蹦床位于某个定义的地址。

请阅读维基百科页面

蹦床或特定地址并没有什么神奇之处,任何可以执行代码的地址都可以容纳蹦床。例如,它们有许多用例

假设您正在启动一个闪存,一个spi闪存,以某种安全速率运行,以便芯片为所有用户启动。但是您希望提高spi闪存的速率,并且spi外围设备不允许您在执行代码时进行更改。因此,您可以将一些代码复制到ram中,该代码将spi闪存速率提高到更快的速率,这样您就可以更快地使用和/或运行闪存,然后从闪存中恢复运行。你已经从ram中的一点点代码中跳出来或蹦出来了

你有一个从闪存启动的芯片,但是有能力将地址空间重新映射到ram,例如,你将一些代码复制到其他ram,分支到它,一点点蹦床代码重新映射地址空间,然后将你反弹回来,或者将你反弹到闪存现在映射到的位置或其他任何地方

你会看到gnu链接器有时会添加一个小蹦床,比如你把一些模块编译成thumb,另一些编译成arm,你不必再使用交互功能,链接器会负责清理,它可能会添加一两条指令在模式之间蹦床,有时,它修改代码,使其只到达需要的地方;有时,它修改代码,将链接分支到某个靠近的地方,而某个靠近的地方是一个蹦床

我假设如果/当切换到该模式时,可能需要对aarch64执行相同的操作

所以不应该有魔法。您的特定应用程序可能有一个或多个蹦床,您感兴趣的应用程序甚至可能不会被称为蹦床,但可能是特定于应用程序的,绝对没有理由每个人都有一个地址,除非它是非常严格的操作特定的(再次称为“特定于应用程序”)该操作系统的一个特定蹦床位于某个定义的地址。

“蹦床”:有几种含义,通常是“如何从A“反弹”到B”@德韦尔奇说,只要看看维基百科,但这无助于弄清蹦床的味道。我不确定——如果我知道,我会回答,而不是评论——但在系统编程中,“蹦床”通常与UNIX信号处理有关。在糟糕的过去,内核将代码(!)写入用户堆栈,以分支到信号处理程序,并在完成时返回。我们的种族相似。所以我会在你的ARM操作系统中搜索信号和ptrace。(猜测:这些代码地址是std Trampoline,避免在堆栈上编写代码。)“Trampoline”:有几种含义,通常是“如何从A“反弹”到B”@德韦尔奇说,只要看看维基百科,但这无助于弄清蹦床的味道。我不确定——如果我知道,我会回答,而不是评论——但在系统编程中,“蹦床”通常与UNIX信号处理有关。在糟糕的过去,内核将代码(!)写入用户堆栈,以分支到信号处理程序,并在完成时返回。我们的种族相似。所以我会在你的ARM操作系统中搜索信号和ptrace。(猜测:这些代码地址是std蹦床,避免了在堆栈上编写代码的需要。)