- 論壇徽章:
- 0
|
本帖最后由 EncoreDeng 于 2014-05-27 14:25 編輯
大家好,關(guān)于AIX系統(tǒng)調(diào)用的捕獲(教程在http://www.ibm.com/developerwork ... ceptcall/index.html),
我做了部分測(cè)試,發(fā)現(xiàn)如下問(wèn)題, 希望大神們能夠有所指點(diǎn),謝謝.
首先簡(jiǎn)單的C代碼如下
int main(void)
{
void *pAddr = (void *)chmod;
int *pInt = (int *)pAddr;
printf("%X %X\n", pInt[0], pInt[1]);
chmod("./testchmod.c", S_IRUSR|S_IWUSR|S_IXUSR);
int n = open("./testchmod.c", O_RDONLY);
return 0;
}
打印輸出: 3700 138
正如文章所講, 偽函數(shù)描述符的第一個(gè)雙字(double-word)包含系統(tǒng)調(diào)用入口點(diǎn)的地址(0x3700),而第二個(gè)雙字包含 chmod 的 svc 編號(hào)(0x138)
但當(dāng)我嘗試把系統(tǒng)調(diào)用從chmod換到open時(shí),打印輸出就完全不是那回事,
int main(void)
{
void *pAddr = (void *)open;//chmod
int *pInt = (int *)pAddr;
printf("%X %X\n", pInt[0], pInt[1]);
chmod("./testchmod.c", S_IRUSR|S_IWUSR|S_IXUSR);
int n = open("./testchmod.c", O_RDONLY);
return 0;
}
打印輸出:D0119AE0 F1A724A0
當(dāng)我嘗試用dbx進(jìn)行,嘗試查看open的匯編指令,發(fā)現(xiàn)情況也跟chmod有很大區(qū)別.
(dbx) listi open
0xd0119ae0 (open) 7c0802a6 mflr r0
0xd0119ae4 (open+0x4) 93e1fffc stw r31,-4(r1)
0xd0119ae8 (open+0x8) 93c1fff8 stw r30,-8(r1)
0xd0119aec (open+0xc) 93a1fff4 stw r29,-12(r1)
0xd0119af0 (open+0x10) 9381fff0 stw r28,-16(r1)
0xd0119af4 (open+0x14) 9361ffec stw r27,-20(r1)
0xd0119af8 (open+0x18) 83e206d8 lwz r31,0x6d8(r2)
0xd0119afc (open+0x1c) 90010008 stw r0,0x8(r1)
0xd0119b00 (open+0x20) 8002000c lwz r0,0xc(r2)
0xd0119b04 (open+0x24) 9421ffa0 stwu r1,-96(r1)
另外我嘗試查看其他多個(gè)系統(tǒng)調(diào)用,發(fā)現(xiàn)也不能用教程里的辦法,取為函數(shù)描述符的前兩個(gè)雙字來(lái)獲得系統(tǒng)調(diào)用的入口地址和相應(yīng)的svc.
希望各位大蝦能夠解答小弟的小小疑問(wèn).
小弟就此拜謝!
|
|