2010-04-27 53 views
3

我有一個Windows Mobile 6 ARMV4I項目,我想要獲取程序計數器的值。在ARM程序集中獲取PC值

該函數聲明如下:

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()功能,每次都遇到相同的號碼。所以,我假設我的集會沒有做我認爲正在做的事情。任何人都可以指出我可能做錯了什麼?

感謝, PaulH

回答

7

PC每次都是一樣的,因爲ldr r0, [r15]有固定的地址(PC總是有相同)。使用R14,因爲它擁有返回地址,這可能是你需要的。或使用內聯函數。

+0

假設他使用微軟的開發工具,不支持嵌入式ARM彙編。 – ctacke 2010-04-27 18:26:25

+0

這是我第一次參加集會,所以我可能會誤解你。但是,R15是程序計數器,R0是根據http://www.pentest.co.uk/documents/exploringwce/exploring_wce_shellcode.html#N10081的返回值。你是說這個網站是錯誤的,它實際上是R14?謝謝 – PaulH 2010-04-27 18:26:58

+0

@ctacke - 是的,我正在使用VS2008,並且不支持內聯'__arm'命令。 – PaulH 2010-04-27 18:27:53

4

如果這是一個真正的函數,那麼您應該始終在此代碼中獲得相同的值,因爲您只是返回GetPC中的當前PC。

你可能想:

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