Windows mobile 在ARM组件中获取PC值

Windows mobile 在ARM组件中获取PC值,windows-mobile,assembly,arm,Windows Mobile,Assembly,Arm,我有一个WindowsMobile6ARMV4i项目,我想从中获取程序计数器的值 函数声明如下: extern "C" unsigned __int32 GetPC(); GetPC FUNCTION EXPORT GetPC ldr r0, [r15] ; load the PC value in to r0 mov pc, lr ; return the value of r0 ENDFUNC 我的汇编代码如下所示: extern "C" unsig

我有一个WindowsMobile6ARMV4i项目,我想从中获取程序计数器的值

函数声明如下:

extern "C" unsigned __int32 GetPC();
GetPC FUNCTION
    EXPORT GetPC
    ldr r0, [r15]   ; load the PC value in to r0
    mov pc, lr      ; return the value of r0
ENDFUNC
我的汇编代码如下所示:

extern "C" unsigned __int32 GetPC();
GetPC FUNCTION
    EXPORT GetPC
    ldr r0, [r15]   ; load the PC value in to r0
    mov pc, lr      ; return the value of r0
ENDFUNC
但是,当我调用
GetPC()
函数时,每次都会得到相同的号码。所以,我假设我的程序集没有做我认为它正在做的事情。有人能指出我可能做错了什么吗

谢谢,
保罗

电脑每次都是一样的,因为ldr r0,[r15]有固定地址(电脑在那里总是一样的)。使用R14,因为它包含返回地址,这可能是您需要的。或者使用内联函数。

如果这是一个真函数,您应该在代码中始终获得相同的值,因为您只是返回GetPC中的当前PC

您可能想要:

move r0, lr // put return address in r0
move pc, lr // return

假设他使用的是微软工具,内联ARM汇编程序就不受支持。这是我第一次尝试汇编,所以我可能误解了你们。但是,R15是程序计数器,R0是根据的返回值。你是说那个网站错了,实际上是R14吗?Thanks@ctacke-是的,我使用的是VS2008,不支持内联
\uu arm
命令。@PaulH每条指令都有地址。一旦函数被编译,它的指令就会被放入内存并具有固定的地址。当您执行ldr r0、[r15]时,您将得到相同的结果,因为此指令被固定在内存中。如果宏受支持,你可以试试。@PaulH你的arm汇编编译器是什么?