---
# System prepended metadata

title: AFL QEMU_MODE(三)
tags: [afl]

---

###### 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)
結果看起來是成功的！