锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品www人人爽人人,精品久久久无码中文字幕,99久久免费国产精品http://www.shnenglu.com/hex108/category/15506.html鎳傚巻鍙?==> 鐭ユ湭鏉? zh-cnTue, 26 Jul 2011 14:41:10 GMTTue, 26 Jul 2011 14:41:10 GMT60linux淇″彿鏈哄埗 錛?鐢ㄦ埛鍫嗘爤鍜屽唴鏍稿爢鏍堢殑鍙樺寲http://www.shnenglu.com/hex108/archive/2011/07/26/151886.htmlhex108hex108Tue, 26 Jul 2011 10:27:00 GMThttp://www.shnenglu.com/hex108/archive/2011/07/26/151886.htmlhttp://www.shnenglu.com/hex108/comments/151886.htmlhttp://www.shnenglu.com/hex108/archive/2011/07/26/151886.html#Feedback0http://www.shnenglu.com/hex108/comments/commentRss/151886.htmlhttp://www.shnenglu.com/hex108/services/trackbacks/151886.html姝ゆ枃鍙畝鍗曞垎鏋愬彂閫佷俊鍙風粰鐢ㄦ埛紼嬪簭鍚庯紝鐢ㄦ埛鍫嗘爤鍜屽唴鏍稿爢鏍堢殑鍙樺寲銆傛病鏈夊垎鏋愬疄鏃朵俊鍙鳳紝褰撶劧鏁翠釜榪囩▼鍩烘湰涓鑷淬傚緢澶氬弬鑰冧簡錛滄儏鏅垎鏋愶紴錛屾墍浠ユ湁浜涗唬鐮佸拰鐜板湪鐨勫唴鏍稿彲鑳戒笉鍚岋紝姣斿RESTORE_ALL錛屼絾澶т綋鐨勬満鍒舵槸綾諱技鐨勩?br />
1. 涓涓俊鍙峰皬渚嬪瓙

hex@Gentoo ~/signal $ cat sigint.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sig_int(int signo)
{
    printf("hello\n");
}

int main()
{
    if(signal(SIGINT, sig_int) == SIG_ERR){
        printf("can't catch SIGINT\n");
        exit(-1);
    }

    for(;;)
        ;

    return 0;
}

2. 鐢ㄦ埛鍫嗘爤閲屽彂鐢熺殑鏁呬簨

2.1 緙栬瘧榪愯璇ョ▼搴?騫惰緗柇鐐瑰湪sig_int鍑芥暟寮澶?0x80482e8)錛屽茍璁劇疆SIGINT淇″彿鐨勫鐞嗘柟寮?br />hex@Gentoo ~/signal $ gdb ./sigint
(gdb) b *0x80482e8
Breakpoint 1 at 0x80482e8: file sigint.c, line 6.
(gdb) handle SIGINT noprint pass
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) y
Signal        Stop    Print    Pass to program    Description
SIGINT        No    No    Yes        Interrupt
(gdb) r
Starting program: /home/gj/signal/sigint

2.2 鍚戣紼嬪簭鍙戦佷俊鍙? kill -INT 姝ょ▼搴忕殑pid鍙?br />hex@Gentoo ~/signal $ kill -INT 4639

2.3 璇ョ▼搴忔敹鍒頒俊鍙峰悗鍋滃湪鏂偣澶?br />Breakpoint 1, sig_int (signo=2) at sigint.c:6
6    {
(gdb) i r esp
esp            0xbfffe7ec    0xbfffe7ec
(gdb) x/40a 0xbfffe7ec
0xbfffe7ec:    0xb7fff400    0x2    0x33    0x0
0xbfffe7fc:    0x7b    0x7b    0x8048930 <__libc_csu_init>    0x80488f0 <__libc_csu_fini>
0xbfffe80c:    0xbfffed58    0xbfffed40    0x0    0x0
0xbfffe81c:    0xbfffec18    0x0    0x0    0x0
0xbfffe82c:    0x8048336 <main+58>    0x73    0x213    0xbfffed40
0xbfffe83c:    0x7b    0xbfffead0    0x0    0x0
0xbfffe84c:    0x0    0x0    0x0    0x0
0xbfffe85c:    0x0    0x0    0x0    0x0
0xbfffe86c:    0x0    0x0    0x0    0x0
0xbfffe87c:    0x0    0x0    0x0    0x0
鏍堜笂鐨勫唴瀹逛負淇″彿鏍坰igframe錛?br />鏍規嵁姝ょ粨鏋勫彲浠ョ煡閬擄細
1). 榪斿洖鍦板潃0xb7fff400錛屽畠鎸囧悜vdso閲岀殑sigreturn
(gdb) x/10i 0xb7fff400
   0xb7fff400 <__kernel_sigreturn>:    pop    %eax
   0xb7fff401 <__kernel_sigreturn+1>:    mov    $0x77,%eax
   0xb7fff406 <__kernel_sigreturn+6>:    int    $0x80
榪欎釜鍦板潃鏍規嵁鍐呮牳鐨勪笉鍚岃屼笉鍚岋紝鎴戠殑鍐呮牳鐗堟湰鏄?.6.38銆?br />2). 淇″彿澶勭悊紼嬪簭瀹屾垚鍚庯紝浼氬洖鍒?eip = 0x8048336 鐨勫湴鍧緇х畫鎵ц銆?br />

2.4 鎵ц瀹宻ig_int鍑芥暟鍚庯紝榪涘叆浜哶_kernel_sigreturn錛屾帴鐫鍥炲埌浜嗕唬鐮?x8048336澶勶紝涓鍒囨仮澶嶄簡姝e父銆?br />(gdb) x/5i $pc
=> 0x8048336 <main+58>:    jmp    0x8048336 <main+58>
(gdb) i r esp
esp            0xbfffed40    0xbfffed40

鍦ㄧ敤鎴峰眰鎴戜滑鑳界湅鍒扮殑鍙湁涓婇潰榪欎箞澶氫俊鎭簡錛屽彲鑳芥湁涓涓湴鏂逛笉鑳界悊瑙o細鍦ㄤ笂闈㈣繃紼媍涓?浠?xbfffe7ec璧烽偅涓鍧楁爤涓婄殑鍐呭浠庡摢鏉ョ殑錛燂紙姝e父鎯呭喌涓嬪爢鏍坋sp搴旇涓鐩存寚鍚戝湪榪囩▼d涓樉紺虹殑esp鍊?xbfffed40錛?br />
鐜板湪鏉ョ湅鐪嬪湪涓婇潰榪欎簺鐜拌薄涔嬩笅錛屽唴鏍哥殑鍫嗘爤鍙戠敓浜嗘庢牱鐨勫彉鍖栥?br />
3. 鍐呮牳鍫嗘爤閲屽彂鐢熺殑鏁呬簨
3.1 鍙戜俊鍙鋒椂
鍦?2.2 閲屽綋鎵цkill -INT 4639鍚庯紝pid涓?639鐨勭▼搴忥紙涔熷氨鏄垜浠繍琛岀殑 ./sigint錛変細鏀跺埌涓涓俊鍙鳳紝浣嗘槸淇″彿瀹為檯閮芥槸鍦ㄥ唴鏍擱噷瀹炵幇鐨勩傛瘡涓繘紼嬶紙榪欓噷鍙榪涚▼鐨勬儏鍐碉紝綰跨▼綾諱技錛岀嚎紼嬫湁涓涓猼id錛夐兘鏈変竴涓猵id錛屼笌姝id瀵瑰簲鏈変竴涓粨鏋?task_struct 錛屽湪task_struct閲屾湁涓涓彉閲?struct sigpending pending錛屽綋璇ヨ繘紼嬫敹鍒頒俊鍙鋒椂錛屽茍涓嶄細绔嬪嵆浣滃嚭鍙嶅簲錛屽彧鏄鍐呮牳鎶婅繖涓俊鍙瘋鍦ㄤ簡姝ゅ彉閲忛噷錛堝畠閲岄潰鏄竴涓摼琛ㄧ粨鏋勶級銆傚綋鐒訛紝姝ゆ椂涓庡唴鏍稿爢鏍堣繕娌℃湁澶氬ぇ鍏崇郴銆?br />
3.2 媯嫻嬩俊鍙?br />  濡傛灉鍙褰曚簡淇″彿錛屼絾娌℃湁鐩稿簲鍙嶅簲錛岄偅鏈変粈涔堢敤鍟娿備竴涓繘紼嬪湪浠涔?鎯呭喌涓嬩細媯嫻嬩俊鍙風殑瀛樺湪鍛紵鍦?lt;鎯呮櫙鍒嗘瀽>閲岃鍒頒簡錛?#8220;鍦ㄤ腑鏂満鍒朵腑錛屽鐞嗗櫒鐨勭‖浠跺湪姣忔潯鎸囦護緇撴潫鏃墮兘瑕佹嫻嬫槸鍚︽湁涓柇璇鋒眰鐨勫瓨鍦ㄣ備俊鍙鋒満鍒舵槸綰蔣浠剁殑錛屽綋鐒朵笉鑳戒緷闈犵‖浠舵潵媯嫻嬩俊鍙風殑鍒版潵銆傚悓鏃訛紝瑕佸湪姣忔潯鎸囦護緇撴潫鏃墮兘鏉ユ嫻嬫樉鐒舵槸涓嶇幇瀹炵殑錛岀敋鑷蟲槸涓嶅彲鑳界殑銆傛墍浠ュ淇″彿鐨勬嫻嬫満鍒舵槸錛氭瘡褰撲粠緋葷粺璋冪敤錛屼腑鏂鐞嗘垨寮傚父澶勭悊榪斿洖鍒扮敤鎴風┖闂寸殑鍓嶅錛涜繕鏈夊氨鏄綋榪涚▼琚粠鐫$湢涓敜閱掞紙蹇呭畾鏄湪緋葷粺璋冪敤涓級鐨勬椂鍊欙紝姝ゆ椂鑻ュ彂鐜版湁淇″彿鍦ㄧ瓑寰呭氨瑕佹彁鍓嶄粠緋葷粺璋冪敤榪斿洖銆傛昏岃█涔嬶紝涓嶇鏄甯歌繑鍥炶繕鏄彁鍓嶈繑鍥烇紝鍦ㄨ繑鍥炲埌鐢ㄦ埛絀洪棿鐨勫墠澶曟繪槸瑕佹嫻嬩俊鍙風殑瀛樺湪騫朵綔鍑哄弽搴斻?#8221;

  鍥犳錛屽鏀跺埌鐨勪俊鍙峰仛鍑哄弽搴旂殑鏃墮棿鏄?浠庡唴鏍歌繑鍥炵敤鎴風┖闂寸殑鍓嶅錛岄偅涔堟湁閭d簺鎯呭喌浼氳紼嬪簭榪涘叆鍐呮牳鍛紵絳旀鏄腑鏂紝寮傚父鍜岀郴緇熻皟鐢ㄣ傜畝鍗曚簡瑙d竴涓嬪畠浠彂鐢熸椂鍐呮牳鍫嗘爤鐨勫彉鍖栥?br />
  //-----涓柇錛屽紓甯革紝緋葷粺璋冪敤 : 寮濮?
   1)鍦ㄧ敤鎴風┖闂村彂鐢熶腑鏂椂錛孋PU浼氳嚜鍔ㄥ湪鍐呮牳絀洪棿淇濆瓨鐢ㄦ埛鍫嗘爤鐨凷S錛?鐢ㄦ埛鍫嗘爤鐨凟SP錛?EFLAGS, 鐢ㄦ埛絀洪棿鐨凜S, EIP, 涓柇鍙?- 256
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 涓柇鍙?錛?256
   榪涘叆鍐呮牳鍚庯紝浼氳繘琛屼竴涓猄AVE_ALL錛岃繖鏍峰唴鏍告爤涓婄殑鍐呭涓猴細
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 涓柇鍙?錛?256 | ES | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX

   濂戒簡錛屼竴鍒囬兘澶勭悊瀹屾椂錛屽唴鏍竕mp鍒癛ESTORE_ALL錛堝畠鏄竴涓畯錛屼緥錛氬湪x86_32浣撶郴緇撴瀯涓嬶紝/usr/src/kernel/arch/286/kernel/entry_32.S鏂囦歡閲屽寘鍚瀹忕殑瀹氫箟錛?br />
   RESTORE鍋氱殑宸ヤ綔錛屼粠瀹冪殑浠g爜閲屽氨鍙互鐪嬪嚭鏉ヤ簡錛?nbsp;  
   棣栧厛鎶婃爤涓婄殑 ES | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX pop鍒板搴旂殑瀵勫瓨鍣ㄩ噷
   鐒跺悗灝唀sp 錛?4 鎶?“涓柇鍙?錛?256” pop鎺?
   姝ゆ椂鍐呮牳鏍堜笂鐨勫唴瀹逛負錛?br />   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP
   鏈鍚庢墽琛宨ret鎸囦護錛屾鏃禖PU浼氫粠鍐呮牳鏍堜笂鍙栧嚭SS, ESP, ELFGAS, CS, EIP錛岀劧鍚庢帴鐫榪愯銆?br />
   2) 鍦ㄧ敤鎴風┖闂村彂鐢熷紓甯告椂錛孋PU鑷姩淇濆瓨鍦ㄥ唴鏍告爤鐨勫唴瀹逛負錛?br />   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 鍑洪敊浠g爜 error_code
   錛堟敞錛欳PU鍙槸鍦ㄨ繘鍏ュ紓甯告椂鎵嶇煡閬撴槸鍚﹀簲璇ユ妸鍑洪敊浠g爜鍘嬪叆鍫嗘爤錛堜負浠涔?錛夛紝鑰屼粠寮傚父澶勭悊閫氳繃iret鎸囦護榪斿洖鏃跺凡緇忔椂榪囧榪侊紝CPU宸茬粡鏃犱粠鐭ュ綋鍒濆彂鐢熷紓甯哥殑鍘熷洜錛屽洜姝や笉浼氳嚜鍔ㄨ煩榪囪繖涓欏癸紝鑰岃闈犵浉搴旂殑寮傚父澶勭▼搴忓鍫嗘爤鍔犱互璋冩暣錛屼嬌寰楀湪CPU寮濮嬫墽琛宨ret鎸囦護鏃跺爢鏍堥《閮ㄦ槸榪斿洖鍦板潃錛?br />
   榪涘叆鍐呮牳鍚庯紝娌℃湁榪涜SAVE_ALL錛岃屾槸榪涘叆鐩稿簲鐨勫紓甯稿鐞嗗嚱鏁幫紙榪欎釜鍑芥暟鏄寘瑁呭悗鐨勶紝鐪熸鐨勫鐞嗗嚱鏁板湪鍚庨潰錛夛紙鍦ㄦ鍑芥暟閲屼細鎶婄湡姝g殑澶勭悊鍑芥暟鐨勫湴鍧push鍒版爤涓婏級錛岀劧鍚巎mp鍒板悇縐嶅紓甯稿鐞嗘墍鍏辯敤鐨勭▼搴忓叆鍙rror_code錛屽畠浼氬儚SAVE_ALL閭f牱淇濆瓨鐩稿簲鐨勫瘎瀛樺櫒錛堟病鏈変繚瀛楨S錛夛紝姝ゆ椂鍐呮牳絀洪棿涓婄殑鍐呭涓猴細
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 鍑洪敊浠g爜 error_code | 鐩稿簲寮傚父澶勭悊鍑芥暟鍏ュ彛 | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX
   錛堟敞錛氬鏋滄病鏈夊嚭閿欎唬鐮侊紝鍒欐鍊間負0錛?br />
   鏈鍚庣粨鏉熸椂涓庝腑鏂被浼鹼紙RESTORE_ALL錛夈?br />
   3) 鍙戠敓緋葷粺璋冪敤鏃訛紝CPU鑷姩淇濆瓨鍦ㄥ唴鏍告爤鐨勫唴瀹逛負:
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP
   涓轟簡涓庝腑鏂拰寮傚父鐨勬爤涓鑷達紝鍦ㄨ繘鍏ョ郴緇熻皟鐢ㄥ叆鍙o紙ENTRY(system_call)錛夊悗浼氶鍏坧ush %eax錛岀劧鍚庤繘琛孲AVE_ALL錛屾鏃跺唴鏍告爤涓婄殑鍐呭涓?br />   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | EAX | ES | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX
 
   鏈鍚庣粨鏉熸椂涓庝腑鏂被浼鹼紙RESTORE_ALL錛夈?br />   //-----涓柇錛屽紓甯革紝緋葷粺璋冪敤 : 緇撴潫

   涓柇錛屽紓甯革紝緋葷粺璋冪敤榪欓儴鍒嗘湁涓鐐歸仐婕忕殑鍦版柟錛氭嫻嬩俊鍙風殑鏃舵満灝辨槸绱ф尐鐫RESTORE_ALL涔嬪墠鍙戠敓鐨勩?br />
3.3 瀵規嫻嬪埌鐨勪俊鍙峰仛鍑哄弽搴?br />  濡傛灉媯嫻嬪埌鏈夎澶勭悊鐨勪俊鍙鋒椂錛屽氨瑕佸紑濮嬪仛涓浜涘噯澶囧伐浣滀簡錛屾鏃跺唴鏍擱噷鐨勫唴瀹逛負錛堣繘鍏ュ唴鏍哥幇鍦烘椂鐨勫唴瀹癸級
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 鐢ㄦ埛鍫嗘爤鐨凟SP1 | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | EIP1 | ? | ES1 | DS1 | EAX1 | EBP1 | EDI1 | ESI1 | EDX1 | ECX1 | EBX1
  錛堟敞錛氾紵鐨勫兼湁涓変釜閫夋嫨錛氫腑鏂彿 錛?256錛忓嚭閿欎唬鐮?error_code錛忓嚭閿欎唬鐮?error_code錛?
  鍋囪灝嗚澶勭悊鐨勪俊鍙峰搴旂殑淇″彿澶勭悊紼嬪簭鏄敤鎴瘋嚜宸辮緗殑錛屽嵆鏈枃涓璖IGINT瀵瑰簲鐨勪俊鍙峰鐞嗙▼搴弒ig_int銆?br />  鐜板湪瑕佸仛鐨勪簨鎯呮槸璁ヽpu鍘繪墽琛屼俊鍙峰鐞嗙▼搴弒ig_int錛屼絾鏄墽琛屽墠闇瑕佸仛濂藉噯澶囧伐浣滐細
  3.3.1  setup_frame
  鍦ㄧ敤鎴風┖闂磋緗ソ淇″彿鏍?struct sigframe)(鍋囪璁劇疆濂芥爤鍚巈sp鐨勫間負sigframe_esp錛屽湪鏈枃涓叾鍊間負0xbfffe7ec)錛屽嵆鍦?.3閲岀湅鍒扮殑鏍堝唴瀹廣?br />  娉細struct sigframe閲岃嚦灝戝寘鍚互涓嬪唴瀹癸細
  鐢ㄦ埛鍫嗘爤鐨凷S1錛?鐢ㄦ埛鍫嗘爤鐨凟SP1錛?EFLAGS1錛?鐢ㄦ埛絀洪棿鐨凜S1錛?EIP1錛?ES1錛?DS1錛?EAX1錛?EBP1錛?EDI1錛?ESI1錛?EDX1錛?ECX1錛?EBX1

  3.3.2 璁劇疆鍗沖皢榪愯鐨別ip鐨勫間負淇″彿澶勭悊鍑芥暟sig_int鐨勫湴鍧錛堜負0x80482e8錛夛紝騫惰緗敤鎴稥SP鐨勫間負sigframe_esp(涓?xbfffe7ec)錛岃繖鏄氳繃淇敼鍐呮牳鏍堥噷鐨凟IP鍜孍SP鐨勫煎疄鐜扮殑錛屽洜涓哄湪浠庣郴緇熻皟鐢ㄩ噷iret鏃訛紝浼氫粠鍐呮牳鏍堥噷鍙朎IP錛孍SP銆?br />  榪欐椂鍐呮牳鏍堢殑鍐呮牳涓?
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 0xbfffe7ec | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | 0x80482e8 | ? | ES1 | DS1 | EAX1 | EBP1 | EDI1 | ESI1 | EDX1 | ECX1 | EBX1
 
  鏈鍚庯紝榪涜RESTORE_ALL錛屽唴鏍告爤涓婄殑鍐呭涓猴細
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 0xbfffe7ec | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | 0x80482e8
 
  RESTORE_ALL閲屾墽琛屽畬iret鍚庯紝瀵勫瓨鍣ㄥ唴瀹逛負錛?EIP涓?x80482e8(鍗硈ig_int),esp涓?xbfffe7ec 銆?浜庢槸鐢ㄦ埛絀洪棿鍒頒簡姝ラ 2.3

3.4 淇″彿澶勭悊紼嬪簭瀹屾垚浠ュ悗
  2.3 -> 2.4錛岃繘鍏ヤ簡sig_return緋葷粺璋冪敤錛屽湪sig_return閲岋紝鍐呮牳鏍堢殑鍐呭涓猴紙姣忎釜鍚嶅瓧鍚庨潰鍔犱竴涓?浠ヤ究涓庡墠闈㈢殑1鍖哄垎錛?br />  | 鐢ㄦ埛鍫嗘爤鐨凷S2 | 鐢ㄦ埛鍫嗘爤鐨凟SP2 | EFLAGS2 | 鐢ㄦ埛絀洪棿鐨凜S2 | EIP2 | ? | ES2 | DS2 | EAX2 | EBP2 | EDI2 | ESI2 | EDX2 | ECX2 | EBX2
  sig_return瑕佸仛鐨勪富瑕佸伐浣滃氨鏄牴鎹敤鎴鋒爤閲宻igframe鐨勫間慨鏀瑰唴鏍告爤閲岀殑鍐呭錛屼嬌鍐呮牳鏍堝彉涓?
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 鐢ㄦ埛鍫嗘爤鐨凟SP1 | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | EIP1 | ? | ES1 | DS1 | EAX1 | EBP1 | EDI1 | ESI1 | EDX1 | ECX1 | EBX1
                                                  
  鑷蟲鍐呮牳鏍堥噷鐨勫唴瀹瑰拰榪涜淇″彿澶勭悊鍓嶄竴鏍蜂簡銆傜粡榪嘡ESTORE_ALL鍚庯紝鐢ㄦ埛鍫嗘爤閲岀殑鍐呭涔熷拰浠ュ墠涓鏍鳳紙涓昏鎸嘐SP鐨勫間竴鏍鳳級銆?

  "kill -INT 4639" 鍙槸涓孌靛皬鎻掓洸銆傜▼搴忎粠鍘熷寮濮嬭繍琛屻?/div>

hex108 2011-07-26 18:27 鍙戣〃璇勮
]]>
linux涓嬬殑vdso涓巚syscallhttp://www.shnenglu.com/hex108/archive/2010/11/22/134313.htmlhex108hex108Mon, 22 Nov 2010 13:19:00 GMThttp://www.shnenglu.com/hex108/archive/2010/11/22/134313.htmlhttp://www.shnenglu.com/hex108/comments/134313.htmlhttp://www.shnenglu.com/hex108/archive/2010/11/22/134313.html#Feedback0http://www.shnenglu.com/hex108/comments/commentRss/134313.htmlhttp://www.shnenglu.com/hex108/services/trackbacks/134313.html     浼犵粺鐨勭郴緇熻皟鐢ㄦ槸鎬庢牱鐨勶紵    鈥斺?int 0x80鐨勬椂浠?/strong>

....             錛涢氳繃瀵勫瓨鍣ㄤ紶鍙?
mov $n ,eax      錛涘皢緋葷粺璋冪敤鍙鋒斁鍒癳ax涓?
int 0x80


sysenter/sysexit鐨勫嚭鍦?/strong>

        鍦ㄤ竴涓狵ernel.org鐨勯偖浠跺垪琛ㄤ腑錛屾湁涓灝侀偖浠惰璁轟簡“"Intel P6 vs P7 system call performance”錛屾渶鍚庡緱鍑虹殑緇撹鏄噰鐢ㄤ紶緇熺殑int 0x80鐨勭郴緇熻皟鐢ㄦ氮璐逛簡寰堝鏃墮棿錛堝叿浣撳師鍥犲彲浠ョ湅鍙傝冭祫鏂?錛夛紝鑰宻ysenter/sysexit鍙互寮ヨˉ榪欎釜緙虹偣錛屾墍浠ュ喅瀹氬湪linux鍐呮牳涓敤鍚庨兘鏇挎崲鍓嶈咃紙鏈緇堝湪2.6鐗堟湰鐨勫唴鏍鎬腑鎵嶅姞鍏ヤ簡姝ゅ姛鑳斤紝鍗抽噰鐢╯ysenter/sysexit錛夈?/p>

        鍦ㄦ浛鎹箣鍓嶉鍏堥渶瑕佺煡閬撴弧瓚沖涓嬫潯浠剁殑ntel鏈哄櫒鎵嶄細鏈塻ysenter/sysexit鎸囦護瀵癸細Family >= 6錛孧odel >= 3錛孲tepping >= 3

        濡備綍鐢ㄦ浛鎹ysenter/sysexit鏇挎崲浠ュ墠鐨刬nt 0x80鍛紵linux kenerl 闇瑕佽冭檻鍒拌繖鐐癸細鏈夌殑鏈哄櫒騫朵笉鏀寔sysenter/sysexit  錛?浜庢槸瀹冭窡glibc璇村ソ浜嗭紝“浣犱互鍚庤皟鐢ㄧ郴緇熻皟鐢ㄧ殑鏃跺欏氨浠庢垜緇欎綘鐨勮繖涓湴鍧璋冪敤錛岃繖涓湴鍧鎸囧悜鐨勫唴瀹硅涔堟槸int 0x80璋冪敤鏂瑰紡錛岃涔堟槸sysenter/sysexit璋冪敤鏂瑰紡錛屾垜浼氭牴鎹満鍣ㄦ潵閫夋嫨鍏朵腑涓涓?#8221;錛坘ernel涓巊libc鐨勯厤鍚堟槸濡傛鐨勯粯濂戯級錛岃繖涓湴鍧渚挎槸vsyscall鐨勯鍦板潃銆?/p>

         鍙互灝唙dso鐪嬫垚涓涓猻hared objdect file錛堣繖涓枃浠跺疄闄呬笂涓嶅瓨鍦級,鍐呮牳灝嗗叾鏄犲皠鍒版煇涓湴鍧絀洪棿錛岃鎵鏈夌▼搴忔墍鍏變韓銆傦紙鎴戣寰楄繖閲岀敤鍒頒簡涓涓妧鏈細澶氫釜铏氭嫙欏甸潰鏄犲皠鍒板悓涓涓墿鐞嗛〉闈€傚嵆鍐呮牳鎶妚dso鏄犲皠鍒版煇涓墿鐞嗛〉闈笂錛岀劧鍚庢墍鏈夌▼搴忛兘浼氭湁涓涓〉琛ㄩ」鎸囧悜瀹冿紝浠ユ鏉ュ叡浜紝榪欐牱姣忎釜紼嬪簭鐨剉dso鍦板潃灝卞彲浠ヤ笉鐩稿悓浜嗭級

hex108@ubuntu:~/program$ uname -a
Linux ubuntu 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux
hex108@ubuntu:~/program$ sudo sysctl -w kernel.randomize_va_space=0 //榪欎釜鏄繀欏葷殑錛屽惁鍒檝dso鐨勫湴鍧鏄殢鏈虹殑(vsyscall鐨勫湴鍧涔熶細鐩稿簲
                                                                        // 鍦板彂鐢?/span>鍙樺寲 )錛?/font>鍦ㄤ笅闈d鐨勬椂鍊欏氨浼氬嚭鐜伴敊璇?/span>
                                                                        //dd: reading `/proc/self/mem': Input/output error
                                                                        
kernel.randomize_va_space = 0
hex108@ubuntu:~/program$ cat /proc/self/maps 
00110000-0012c000 r-xp 00000000 08:01 260639     /lib/ld-2.12.1.so
0012c000-0012d000 r--p 0001b000 08:01 260639     /lib/ld-2.12.1.so
0012d000-0012e000 rw-p 0001c000 08:01 260639     /lib/ld-2.12.1.so
0012e000-0012f000 r-xp 00000000 00:00 0          [vdso]
0012f000-00286000 r-xp 00000000 08:01 260663     /lib/libc-2.12.1.so
00286000-00287000 ---p 00157000 08:01 260663     /lib/libc-2.12.1.so
00287000-00289000 r--p 00157000 08:01 260663     /lib/libc-2.12.1.so
00289000-0028a000 rw-p 00159000 08:01 260663     /lib/libc-2.12.1.so
0028a000-0028d000 rw-p 00000000 00:00 0 
08048000-08051000 r-xp 00000000 08:01 130326     /bin/cat
08051000-08052000 r--p 00008000 08:01 130326     /bin/cat
08052000-08053000 rw-p 00009000 08:01 130326     /bin/cat
08053000-08074000 rw-p 00000000 00:00 0          [heap]
b7df0000-b7ff0000 r--p 00000000 08:01 660864     /usr/lib/locale/locale-archive
b7ff0000-b7ff1000 rw-p 00000000 00:00 0 
b7ffd000-b7ffe000 r--p 002a1000 08:01 660864     /usr/lib/locale/locale-archive
b7ffe000-b8000000 rw-p 00000000 00:00 0 
bffdf000-c0000000 rw-p 00000000 00:00 0          [stack]
hex108@ubuntu:~/program$ dd if=/proc/self/mem of=gate.so bs=4096 skip=$[0x12e] count=1
dd: `/proc/self/mem': cannot skip to specified offset
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.00176447 s, 2.3 MB/s
hex108@ubuntu:~/program$ file gate.so 
gate.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
hex108@ubuntu:~/program$ objdump -d gate.so 

gate.so:     file format elf32-i386


Disassembly of section .text:

ffffe400 <__kernel_sigreturn>:
ffffe400:	58                   	pop    %eax
ffffe401:	b8 77 00 00 00       	mov    $0x77,%eax
ffffe406:	cd 80                	int    $0x80
ffffe408:	90                   	nop
ffffe409:	8d 76 00             	lea    0x0(%esi),%esi

ffffe40c <__kernel_rt_sigreturn>:
ffffe40c:	b8 ad 00 00 00       	mov    $0xad,%eax
ffffe411:	cd 80                	int    $0x80
ffffe413:	90                   	nop

ffffe414 <__kernel_vsyscall>:
ffffe414:	cd 80                	int    $0x80
ffffe416:	c3                   	ret    
 

syscall 鎵嶆槸鏈鍚庣殑璧㈠錛?/strong>

         x86 64浣嶄粠AMD寮曡繘浜唖yscall鎸囦護錛堟垜鍦▁86 64鐨勬満鍣ㄤ笂錛岀湅鍒扮殑緇撴灉鏄痵yscall鍙栦唬浜唖ysenter/sysexit錛堟墍鏈夌殑緋葷粺璋冪敤鐢ㄧ殑閮芥槸syscall錛夛級錛屼絾鏄痸dso,vsyscall鐨勬満鍒朵緷鏃ф湭鍙橈紝鍙槸kernel鍐沖畾鍙湪閬囧埌浠ヤ笅鍑犱釜緋葷粺璋冪敤gettimeofday,time鍜実etcpu錛堥氳繃鍐呮牳閲寁syscall.h涓璭num vsyscall_num鐨勫0鏄庣湅鍑烘潵錛屾垨鑰呭湪glibc婧愪唬鐮佷腑鎼滅儲“VSYSCALL_ADDR_”(

#define VSYSCALL_ADDR_vgettimeofday    0xffffffffff600000

#define VSYSCALL_ADDR_vtime            0xffffffffff600400

#define VSYSCALL_ADDR_vgetcpu          0xffffffffff600800

)錛夋椂鎵嶉噰鐢╲dso鏈哄埗錛堥棿鎺ヨ皟鐢╯yscall錛屽叿浣撳彲浠ュ弬鐪嬭祫鏂?錛夛紝鍏朵粬緋葷粺璋冪敤鐩存帴鐢ㄦ寚浠yscall錛屽師鍥犳槸錛?/p>


 

         "蹇熺郴緇熻皟鐢ㄦ寚浠?姣旇搗涓柇鎸囦護鏉ヨ錛屽叾娑堣楁椂闂村繀鐒朵細灝戜竴浜涳紝浣嗘槸闅忕潃 CPU 璁捐鐨勫彂灞曪紝灝嗘潵搴旇涓嶄細鍐嶅嚭鐜扮被浼?Intel Pentium4 榪欐牱鎮畩鐨勫樊璺濄傝?蹇熺郴緇熻皟鐢ㄦ寚浠?姣旇搗涓柇鏂瑰紡鐨勭郴緇熻皟鐢ㄦ柟寮忥紝榪樺瓨鍦ㄤ竴瀹氬眬闄愶紝渚嬪鏃犳硶鍦ㄤ竴涓郴緇熻皟鐢ㄥ鐞嗚繃紼嬩腑鍐嶉氳繃"蹇熺郴緇熻皟鐢ㄦ寚浠?璋冪敤鍒殑緋葷粺璋冪敤銆傚洜姝わ紝騫朵笉涓瀹氭瘡涓郴緇熻皟鐢ㄩ兘闇瑕侀氳繃"蹇熺郴緇熻皟鐢ㄦ寚浠?鏉ュ疄鐜般傛瘮濡傦紝瀵逛簬澶嶆潅鐨勭郴緇熻皟鐢ㄤ緥濡?fork錛屼袱縐嶇郴緇熻皟鐢ㄦ柟寮忕殑鏃墮棿宸拰緋葷粺璋冪敤鏈韓榪愯娑堣楃殑鏃墮棿鏉ユ瘮錛屽彲浠ュ拷鐣ヤ笉璁★紝姝ゅ閲囧彇"蹇熺郴緇熻皟鐢ㄦ寚浠?鏂瑰紡娌℃湁浠涔堝繀瑕併傝岀湡姝e簲璇ヤ嬌鐢?蹇熺郴緇熻皟鐢ㄦ寚浠?鏂瑰紡鐨勶紝鏄偅浜涙湰韜繍琛屾椂闂村緢鐭紝瀵規椂闂寸簿紜ц姹傞珮鐨勭郴緇熻皟鐢紝渚嬪 getuid銆乬ettimeofday 絳夌瓑銆傚洜姝わ紝閲囧彇鐏墊椿鐨勬墜孌碉紝閽堝涓嶅悓鐨勭郴緇熻皟鐢ㄩ噰鍙栦笉鍚岀殑鏂瑰紡錛屾墠鑳藉緱鍒版渶浼樺寲鐨勬ц兘鍜屽疄鐜版渶瀹岀編鐨勫姛鑳姐?nbsp;     ----寮曡嚜鍙傝冭祫鏂?



      

 

ps:鏂囦腑鐨勫唴鏍哥増鏈負2.6.36錛実libc鐗堟湰涓?.11

鍙傝冭祫鏂?

1.  Linux 2.6 瀵規柊鍨?CPU 蹇熺郴緇熻皟鐢ㄧ殑鏀寔: http://www.ibm.com/developerworks/cn/linux/kernel/l-k26ncpu/index.html  (榪欑瘒鎴戣寰楁渶濂?

2. System Calls 錛?http://www.win.tue.nl/~aeb/linux/lk/lk-4.html錛堥噷闈㈡湁紼嬪簭鍙互鐢ㄦ潵鎼滅儲vsyscall絳夌殑鍦板潃錛屽緢鐩存帴錛?/p>

3. What is linux-gate.so.1 錛?http://www.trilithium.com/johan/2005/08/linux-gate/

4. Intel鎵嬪唽錛岄噷闈㈡湁鍚勭璧勬枡錛屾墜鍐岃繕鏄緢閲嶈鐨勶紝涔熸槸鏈鍩烘湰鐨?/p>



hex108 2010-11-22 21:19 鍙戣〃璇勮
]]>
久久精品亚洲中文字幕无码麻豆 | 久久综合亚洲色HEZYO国产| 精品999久久久久久中文字幕 | 国产精品久久影院| 久久久久国产一区二区| 国产激情久久久久久熟女老人| 日韩久久久久久中文人妻| 99热热久久这里只有精品68| 婷婷久久综合九色综合绿巨人| 久久夜色精品国产亚洲| 久久国产精品成人免费| 久久精品人妻中文系列| 国产精品丝袜久久久久久不卡| 亚洲人AV永久一区二区三区久久 | 亚洲色大成网站WWW久久九九| 狠狠色丁香久久综合五月| 中文字幕无码久久久| 亚洲欧美精品伊人久久| 亚洲精品乱码久久久久久蜜桃不卡| 国产香蕉97碰碰久久人人| 狠狠色丁香久久婷婷综| 久久久亚洲欧洲日产国码二区 | 久久精品国产2020| 久久久WWW免费人成精品| 国产精品久久久久久久| 久久综合给合久久国产免费| 欧美午夜精品久久久久久浪潮| 精品久久久久久国产| 无码国内精品久久人妻| 亚洲伊人久久成综合人影院 | 久久超碰97人人做人人爱| 狠狠色噜噜色狠狠狠综合久久| 久久久久99精品成人片| aaa级精品久久久国产片| 三上悠亚久久精品| 亚洲va国产va天堂va久久| 久久人人爽人人爽人人片AV麻烦| 久久亚洲国产成人影院网站| 国産精品久久久久久久| 久久伊人五月天论坛| 色老头网站久久网|