###### tags: `afl` # AFL QEMU_MODE(三) 想要做的事情是自己先compile一個x86_64的binary,然後試試看LD_PRELOAD這個參數是不是真的可用。 以下是我的code: **lib.c** ```=C int foo(a, b){ return (a + b); } ``` **lib.h** ```=C #ifndef _LIB_H #define _LIB_H int foo(int a, int b); #endif ``` **main.c** ```=C #include "stdio.h" #include "lib.h" int main(){ printf("%d",foo(3, 4)); return 0; } ``` `gcc -fPIC -shared -o lib.so lib.c` `gcc -o main.dyn main.c ./lib.so` 這邊編譯好之後,確實是可以run的。 ![](https://i.imgur.com/GYXU6Sb.png) 但是這樣的話根本就不用加LD_PRELOAD這個參數,因為我在compile的時候就有說我的share object(./lib.so)是在當前的路徑下,所以我就把這個lib.so移到另一個./tmp的dictionary底下,然後再執行一樣的指令: ![](https://i.imgur.com/tSlGfaM.png) 結果確實他就找不到我在compile的時候指令的``./lib.so``這個file,所以我就想說,那我就事這個lib.so用LD_PRELOAD加上去,然後再來試試看能不能load成功: ![](https://i.imgur.com/oAavRGF.png) 結果不管我是用LD_PRELOAD或是AFL_PRELOAD都沒有用,後來我就發現,我在compile的時候,指令的路徑有加下``./``,也就是說我有去指令那個share object一定就是在當前路徑底下,所以我就重新compile,這一次的lib.so我就沒有前`./` `gcc -o main.bin main.c lib.so` 然後直接執行看看之後: ![](https://i.imgur.com/KjiPvUZ.png) 結果他的訊息跟我在執行mips指令的時候一樣,想要link的library都是沒有加路徑的,後來發現如果是沒有加路徑的library,都會去`/etc/ld.so.conf`這個file裡面看有哪一些lib的路徑可以去找 ![](https://i.imgur.com/RvRilh6.png) 看了之後發現他會去include`/etc/ld.so.conf.d/`這個路徑下讀所有的.conf檔,所以我就自己寫了一個`test.conf`到這個路徑底下,`test.conf`裡面寫的就是我`lib.so`存放的地方 ![](https://i.imgur.com/rYWaNLn.png) 加好之後,我就再去執行剛剛的那個compile的時候沒有加上`./`的`main.bin`: ![](https://i.imgur.com/PUx8B03.png) 結果看起來是成功的!