原创 調試斷點原理之普通斷點

以OD爲調試器分析不同斷點的區別: 普通斷點原理:直接改寫斷點內存地址的第一個字節,替換爲int3 (0xcc,軟中斷機制),並保存原始字節至OD維護的一張斷點表處。程序運行到此處時會中斷,拋出異常,OD通過捕獲該異常,暫停程序運行至

原创 PIN插裝~linux下無法識別程序內部定義例程解決方法

經過幾天的coding和閱讀PIN相關API,發現,PIN的開發人員也意識到,在linux下由於沒有符號表,PIN很難識別一些程序內部定義的例程,這些例程的名字通常爲:sub_例程起始地址。因此,需要自己去解決這些未被識別的例程 方法一:

原创 OD內存斷點初步分析

內存斷點原理:        內存斷點原理,通過將內存斷點所在內存頁的屬性修改爲內存斷點屬性(non-access or non-writable),程序執行時,對目標內存頁中所有數據的訪問或寫,都會拋出異常,OD通過截獲此異常,然後對比

原创 指針懸掛~實例解釋

指針懸掛:           指針在釋放之後,沒有設置爲NULL。使得指針仍然指向原地址。           多個指針指向同一對象時,釋放其中一個指針,並設置爲null,其他的指針仍然成爲了懸掛指針。

原创 程序動態完整性校驗之指令分支記錄

目的:記錄程序的分支跳轉地址,比如:jump、call、ret等直接或間接、無條件或條件轉移指令的跳轉地址(從哪來,跳到哪去) 使用動態插裝工具:PIN 分析:             首先,因爲需要記錄指令的地址,並且區分轉移指令,因此

原创 Ubuntu無法啓動~錯誤:init:failed to spawn..解決方法

今天上午做某實驗的時候將/bin/sh的鏈接改了(ubuntu默認指向dash). 做玩實驗後,忘記改回來,然後就重啓了。結果引導項選擇ubuntu之後,無法啓動,一直黑屏,左上角光標閃爍。 然後測試看啓動時的輸出錯誤,grub引導界面,

原创 Pin~動態插裝原理

參考文獻:《Pin:Building Customized Program Analysis Tools with Dynamic Instrumentation》 Pin的插裝流程: 首先系統加載pin並進行初始化,再由pin去加載pi

原创 ELF文件動態鏈接時 GOT,PLT 的變化過程

轉自:http://hi.baidu.com/jfojfo/item/5fc5de3c3b9ebbf2e6bb7a03 ELF文件動態鏈接時 GOT,PLT 的變化過程 Intel平臺下Linux中ELF文件動態鏈接的加載、解析及實例分析

原创 C++虛函數:虛指針、虛表、虛函數入口地址

測試程序: //test.c#include"stdio.h" #include"string.h" class GSVirtual { public: void gsv(char *src) { char buf[200];

原创 linux下安裝protobuf及常見錯誤

下載protobuf-X.X.X.tar.gzmv protobuf-X.X.X.tar.gz des cd des tar -zxvf protobuf-X.X.X.tar.gz ./configure

原创 SUSE Linux 64位環境下編譯hadoop2.2.0源碼

OS環境:SUSE Linux Enterpriser Server 11 SP2  (64位) Mission:由於apache官網所提供的編譯好的Hadoop-2.2.0-tar.gz 只兼容32位系統,安裝在64位系統下會出現各種兼