天天看點

linux下64位彙編的系統調用(1)

現在基本上系統都是64位了,而64位系統下的彙編和32位有了較大的變化,無論是系統調用的接口還是c标準庫的接口都和32位彙編有所不同;下面簡單談一下在64位linux下如何利用彙編直接調用系統調用。

需要準備的有:

1.一台linux機器:我的系統是ubuntu 14.10 x64版;

2.還要一個彙編器;我沒有使用gas,而是使用了跨平台的nasm;

3.一個調試器;這裡選擇的不多,要不就是gdb,要不就是lldb,不過這裡選擇前者。

4.一個編輯器,linux下有很多優秀的文法編輯器,這裡用的是sublime,不過可選的還有很多,比如geany,scite,atom等等,大家可以自便。

5.最好還要一個c的編譯環境,這樣友善參考;linux下可選的貌似也不少我常用的有code::blocks和codelite,這裡選擇後者:一方面其動态調試的彙編支援還不賴,另一方面其本身版本疊代比較快,至少比codeblocks要快得多。

6.還有神馬!?如果可以搞到的話,ida pro也有linux版本哦!其靜态調試的功能那是超級優秀啊!正版價高達幾百美刀啊!不過網上可以覓到xx版本的,不過ida一貫的做法是将32和64位反彙編器分開啊,貌似64位的xx版逆向器比較難搞到。

下面講一下linux彙編中基本的嘗試新問題,首先linux下32位和64位的syscall table調用号是完全不同的,對于本貓的系統來說調用号檔案可以用:

指令快速定位,如果系統曾安裝過多個核心版本,則可能會找到多個檔案,選擇目前系統核心版本的就可以了。比如我的32位syscall table檔案路徑和前幾個調用号如下:

而對應的64位syscall内容如下:

注意32位中wrtie調用号是4,而64位下是1,這個千萬别搞錯了,否則自然一塌糊塗。

繼續閱讀