我的pwn笔记
0.64位程序參數一次保存在RDI,RSI,RDX,RCX,R8和 R9,具體見圖
windows64位調用約定
1.<_libc_csu_init>有一些萬能gadget,匯編如下
#!bash 00000000004005a0 <__libc_csu_init>: 4005a0: 48 89 6c 24 d8 mov %rbp,-0x28(%rsp) 4005a5: 4c 89 64 24 e0 mov %r12,-0x20(%rsp) 4005aa: 48 8d 2d 73 08 20 00 lea 0x200873(%rip),%rbp # 600e24 <__init_array_end> 4005b1: 4c 8d 25 6c 08 20 00 lea 0x20086c(%rip),%r12 # 600e24 <__init_array_end> 4005b8: 4c 89 6c 24 e8 mov %r13,-0x18(%rsp) 4005bd: 4c 89 74 24 f0 mov %r14,-0x10(%rsp) 4005c2: 4c 89 7c 24 f8 mov %r15,-0x8(%rsp) 4005c7: 48 89 5c 24 d0 mov %rbx,-0x30(%rsp) 4005cc: 48 83 ec 38 sub $0x38,%rsp 4005d0: 4c 29 e5 sub %r12,%rbp 4005d3: 41 89 fd mov %edi,%r13d 4005d6: 49 89 f6 mov %rsi,%r14 4005d9: 48 c1 fd 03 sar $0x3,%rbp 4005dd: 49 89 d7 mov %rdx,%r15 4005e0: e8 1b fe ff ff callq 400400 <_init> 4005e5: 48 85 ed test %rbp,%rbp 4005e8: 74 1c je 400606 <__libc_csu_init+0x66> 4005ea: 31 db xor %ebx,%ebx 4005ec: 0f 1f 40 00 nopl 0x0(%rax) 4005f0: 4c 89 fa mov %r15,%rdx 4005f3: 4c 89 f6 mov %r14,%rsi 4005f6: 44 89 ef mov %r13d,%edi 4005f9: 41 ff 14 dc callq *(%r12,%rbx,8) 4005fd: 48 83 c3 01 add $0x1,%rbx 400601: 48 39 eb cmp %rbp,%rbx 400604: 75 ea jne 4005f0 <__libc_csu_init+0x50> 400606: 48 8b 5c 24 08 mov 0x8(%rsp),%rbx 40060b: 48 8b 6c 24 10 mov 0x10(%rsp),%rbp 400610: 4c 8b 64 24 18 mov 0x18(%rsp),%r12 400615: 4c 8b 6c 24 20 mov 0x20(%rsp),%r13 40061a: 4c 8b 74 24 28 mov 0x28(%rsp),%r14 40061f: 4c 8b 7c 24 30 mov 0x30(%rsp),%r15 400624: 48 83 c4 38 add $0x38,%rsp 400628: c3 retq
2.gcc的編譯選項:
-z execstack關閉NX
-z noexecstack開啟NX
-no-pie關閉PIE
-pie開啟PIE
-g 參數可以用GDB加載時l,b <line>在源代碼第<line>行下斷點
關于canary的幾個編譯選項:
-fstack-protector 啟用保護,不過只為局部變量中含有數組的函數插入保護
-fstack-protector-all 啟用保護,為所有函數插入保護
-fstack-protector-strong 類似windows下GS的一個編譯選項,以下加入canary1)在本地變量地址作為右值表達式或作為函數參數2)本地變量是數組或含數組的union
-fstack-protector-explicit 只對有明確stack_protect attribute的函數開啟保護
-fno-stack-protector 禁用保護
3.readelf -S <filename>查看文件段偏移
readelf -r <filename>查看文件重定位表,.rel.dyn和.rel.plt
4.gdb-peda安裝
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
5.pwndbg安裝
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
6.windbg實用命令
!gflag +hpa
這條命令用于定位堆溢出點,hpa=place heap allocations at the end of pages.
sx
set exceptions。sxe ld:<moudle name>,set exceptions enable when load <moudle name>
windbg dump內存
.writemem <DumpFile_Full_Path> <Dump_Start_Addr> L?<Dump_Length>
7.objdump -d -j .plt <filename> 查看<filename>的plt表
objdump -R <filename> 查看<filename>的got表
objdump -M intel -d <filename> 可以查看<filename>bin文件的intel匯編,默認at&t
8.scp -P<port> user@computername:<path> <local_path>下載遠程文件<path>到本地<local_path>
9.cat /proc/[pid]/maps 查看進程加載信息
10.
sudo bash -c "echo 0 > /proc/sys/kernel/randomize_va_space"
關閉系統ASLR
0:沒有隨機化。即關閉 ASLR。
1:保留的隨機化。共享庫、棧、mmap() 以及 VDSO 將被隨機化。
2:完全的隨機化。在 1 的基礎上,通過 brk() 分配的內存空間也將被隨機化。
ASLR并不負責代碼段和數據段的隨機化
11.gdb查找system,'/bin/sh'
print system 查找system函數地址
print __libc_start_main 查找main入口
find <addr of __libc_start_main>,+<offset>,"/bin/sh" 查找"/bin/sh"
官方說明
12.關于RELRO
部分RELRO(由ld -z relro啟用): 將.got段映射為只讀(但.got.plt還是可以寫) 重新排列各個段來減少全局變量溢出導致覆蓋代碼段的可能性. 完全RELRO(由ld -z relro -z now啟用) 執行部分RELRO的所有操作. 讓鏈接器在鏈接期間(執行程序之前)解析所有的符號, 然后去除.got的寫權限. 將.got.plt合并到.got段中, 所以.got.plt將不復存在.
13.pwntools加載指定libc啟動
p=process('<process_name>',env={"LD_PRELOAD":"<libc_absolute_path>"})
pwntools帶參數args啟動<proc>
p=process(argv=['./proc',args])
14.
angr安裝:(一定要在mkvirtualenv的虛擬環境下裝,不然本地pwntools會報各種各樣的錯。人生苦短少瞎折騰;b)
apt-get install python-dev libffi-dev build-essential virtualenvwrapper find / -name virtualenvwrapper.sh //找到的virtualenvwrapper.sh路徑記為<path> export WORKON_HOME=~/Envs //這里最好切到根目錄下 source <path> 創建angr虛擬環境安裝angr(進入虛擬環境后使用pwntools還需在此環境下重新安裝,pip install pwntools) mkvirtualenv angr && pip install angr
15.手動下載符號表
cmd:<windbg_path>/symchk.exe <target_dll_path> /s SRV*<download_path>*http://msdl.microsoft.com/download/symbols
16.windows下利用管理員權限CMD替換系統DLL
takeown /f <dll_path> icacls <dll_path> /grant administrators:F
17.windbg在進程啟動時附加
注冊表[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options<app>.exe]添加字符串值debugger,value為windbg.exe系統環境變量path添加windbg安裝路徑;或者value值設置為windbg.exe的安裝路徑
18.nm -C <filename> 查看<filename>符號表
19.apt-get source libc6-dev 下載源碼
grep "<search_target>" -r ./<libc_source_path>/ 查找<search_target>在<libc_source_path>的位置
20._IO_file
struct _IO_FILE {
int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
#define _IO_file_flags _flags
/* The following pointers correspond to the C++ streambuf protocol. */
/* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
char* _IO_read_ptr; /* Current read pointer */
char* _IO_read_end; /* End of get area. */
char* _IO_read_base; /* Start of putback+get area. */
char* _IO_write_base; /* Start of put area. */
char* _IO_write_ptr; /* Current put pointer. */
char* _IO_write_end; /* End of put area. */
char* _IO_buf_base; /* Start of reserve area. */
char* _IO_buf_end; /* End of reserve area. */
/* The following fields are used to support backing up and undo. */
char *_IO_save_base; /* Pointer to start of non-current get area. */
char *_IO_backup_base; /* Pointer to first valid character of backup area */
char *_IO_save_end; /* Pointer to end of non-current get area. */
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
#if 0
int _blksize;
#else
int _flags2;
#endif
_IO_off_t _old_offset; /* This used to be _offset but it's too small. */
#define __HAVE_COLUMN /* temporary */
/* 1+column number of pbase(); 0 is unknown. */
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
/* char* _save_gptr; char* _save_egptr; */
_IO_lock_t *_lock;
#ifdef _IO_USE_OLD_IO_FILE
};
struct _IO_FILE_plus
{
FILE file; //FILE=_IO_FILE
const struct _IO_jump_t *vtable;
};
struct _IO_FILE;
/* The opaque type of streams. This is the definition used elsewhere. */
typedef struct _IO_FILE FILE;
struct _IO_jump_t
{
JUMP_FIELD(size_t, __dummy);
JUMP_FIELD(size_t, __dummy2);
JUMP_FIELD(_IO_finish_t, __finish);
JUMP_FIELD(_IO_overflow_t, __overflow);
JUMP_FIELD(_IO_underflow_t, __underflow);
JUMP_FIELD(_IO_underflow_t, __uflow);
JUMP_FIELD(_IO_pbackfail_t, __pbackfail);
/* showmany */
JUMP_FIELD(_IO_xsputn_t, __xsputn);
JUMP_FIELD(_IO_xsgetn_t, __xsgetn);
JUMP_FIELD(_IO_seekoff_t, __seekoff);
JUMP_FIELD(_IO_seekpos_t, __seekpos);
JUMP_FIELD(_IO_setbuf_t, __setbuf);
JUMP_FIELD(_IO_sync_t, __sync);
JUMP_FIELD(_IO_doallocate_t, __doallocate);
JUMP_FIELD(_IO_read_t, __read);
JUMP_FIELD(_IO_write_t, __write);
JUMP_FIELD(_IO_seek_t, __seek);
JUMP_FIELD(_IO_close_t, __close);
JUMP_FIELD(_IO_stat_t, __stat);
JUMP_FIELD(_IO_showmanyc_t, __showmanyc);
JUMP_FIELD(_IO_imbue_t, __imbue);
};
關于_IO_file的利用:
p _IO_2_1_stdout_可以找到vtable的地址,然后覆蓋vtable的指針即可改變程序的流程
p *(struct _IO_jump_t *)<vtable_addr>可以查看vtable的內容
21.開啟PIE的程序下相對偏移斷點
pwndbg的一個姿勢(程序運行狀態有效,在需要輸入的位置CTRL+C即可)
b *$rebase(offset) offset替換為斷點的相對偏移
22.ROPgadget --binary <filename> --only "pop|ret" | grep <reg>
過濾<filename>中<reg>的rop gadget
23.關于FORTIFY機制
傳送門
按我個人的理解這是緩沖區溢出的緩解措施,這個機制會進行如下操作:
1)在gcc編譯階段使用編譯選項-D_FORTIFY_SOURCE=2(1 或者 2),gcc會檢測到使用strcpy及類似危險函數時未檢查邊界的情況,給出warning
2)對格式化字符串利用的限制,包括參數解析的地址不能位于可讀可寫區域、使用類似%2$x必須使用%1$x
3)對于需要解析地址的函數替換成對應的__*_chk函數
24.apt-get
# apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後運行該命令。此外您需要定期運行這一命令以確保您的軟件包列表是最新的。 # apt-get install packagename——安裝一個新軟件包(參見下文的aptitude) # apt-get remove packagename——卸載一個已安裝的軟件包(保留配置文件) # apt-get --purge remove packagename——卸載一個已安裝的軟件包(刪除配置文件) # dpkg --force-all --purge packagename 有些軟件很難卸載,而且還阻止了別的軟件的應用,就可以用這個,不過有點冒險。 # apt-get autoclean apt會把已裝或已卸的軟件都備份在硬盤上,所以如果需要空間的話,可以讓這個命令來刪除你已經刪掉的軟件 # apt-get clean 這個命令會把安裝的軟件的備份也刪除,不過這樣不會影響軟件的使用的。 # apt-get upgrade——更新所有已安裝的軟件包 # apt-get dist-upgrade——將系統升級到新版本 # apt-cache search string——在軟件包列表中搜索字符串 # dpkg -l package-name-pattern——列出所有與模式相匹配的軟件包。如果您不知道軟件包的全名,您可以使用“*package-name-pattern*”。 # aptitude——詳細查看已安裝或可用的軟件包。與apt-get類似,aptitude可以通過命令行方式調用,但僅限于某些命令——最常見的有安裝和卸載命令。由于aptitude比apt-get了解更多信息,可以說它更適合用來進行安裝和卸載。 # apt-cache showpkg pkgs——顯示軟件包信息。 # apt-cache dumpavail——打印可用軟件包列表。 # apt-cache show pkgs——顯示軟件包記錄,類似于dpkg –print-avail。 # apt-cache pkgnames——打印軟件包列表中所有軟件包的名稱。 # dpkg -S file——這個文件屬于哪個已安裝軟件包。 # dpkg -L package——列出軟件包中的所有文件。 # apt-file search filename——查找包含特定文件的軟件包(不一定是已安裝的),這些文件的文件名中含有指定的字符串。apt-file是一個獨立的軟件包。您必須先使用apt-get install來安裝它,然後運行apt-file update。如果apt-file search filename輸出的內容太多,您可以嘗試使用apt-file search filename | grep -w filename(只顯示指定字符串作為完整的單詞出現在其中的那些文件名)或者類似方法,例如:apt-file search filename | grep /bin/(只顯示位于諸如/bin或/usr/bin這些文件夾中的文件,如果您要查找的是某個特定的執行文件的話,這樣做是有幫助的)。 apt-get update 系統軟件包更新
25.linux下使用代(敏感詞敏感詞)理
配置小飛機,下載傳送門
安裝
dpkg -i xxx apt-get -f install
設置成全局代(敏感詞敏感詞)理
設置終端代(敏感詞敏感詞)理,我使用的是privoxy
安裝
apt-get install privoxy
修改/etc/privoxy/config配置
1.搜索字符串去掉listen-address 127.0.0.1:8118 這一句的注釋(#) 2.搜索forward-socks5t,改成forward-socks5t / 127.0.0.1:1080 . 并去掉注釋
修改.bashrc,(路徑~/.bashrc),結尾添加如下配置
export http_proxy=http://127.0.0.1:8118 export https_proxy=http://127.0.0.1:8118 export ftp_proxy=http://127.0.0.1:8118
配置修改完畢運行bash即可
26.本地socat部署pwn環境
socat tcp4-listen:<port>,reuseaddr,fork exec:"env LD_PRELOAD=<libc_path> <execute_file_path>" &
socat安裝:
wget http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz tar zxf socat-1.7.3.2.tar.gz cd socat-1.7.3.2 ./configure make make install
27.在Linux中,值為0、1、2的fd分別代表標準輸入、標準輸出和標準錯誤輸出,在程序中打開文件得到的fd從3開始增長
28.Docker安裝
#!/bin/bash apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D; echo 'deb https://apt.dockerproject.org/repo debian-stretch main' > /etc/apt/sources.list.d/docker.list; apt-get install -y apt-transport-https ca-certificates; apt-get update && sudo apt-get install -y docker-engine; systemctl start docker; systemctl enable docker; systemctl status docker; exit; EOF
運行以上腳本
安裝docker-compose
pip install docker-compose
測試安裝(需要注冊docker賬號)傳送門
docker login docker run hello-world
docker加速
docker網絡問題傳送門
使用阿里云docker鏡像加速,獲取加速地址
附
阿里:http://mirrors.aliyun.com/help/docker-ce
清華:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
中科大:http://mirrors.ustc.edu.cn/help/docker-ce.html
修改/etc/docker/daemon.json(沒有則新建)
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"dns": ["8.8.8.8","8.8.4.4"]
}
sudo service docker restart
加速細節傳送門
29.記錄一個shellcode編寫時突破字節限制的奇技淫巧
sc=asm('xchg rdi,rsi')
sc+=asm('mov dl,xx')
sc+=asm('syscall')
即通過交換rdi和rsi的值,執行一次sys_read(rdi,xx),這樣匯編之后的shellcode只有7字節(在除rdi外寄存器全部置零的情況下就可以發揮作用了)
30.
ropper github
ropper --file <filename> |grep syscall 尋找<filename>字節碼中的syscall
31.
pwn使用題目給定的libc動態調試
使用libcdatabase查找所給libc版本
./identify <libc_name>
修改所給elf文件,啟動時使用參數LD_PRELOAD=<libc_name>。pwntools中使用p=process('./<elf>',env={"LD_PRELOAD":"./<libc>"})
patchelf --set-interpreter <libc_ld_path> <elf_name>
LD_PRELOAD=<libc_name> <elf_name>
或者
patchelf --set-rpath <libc_parent_folder>:/<libc_name> <elf_name>
example:
patchelf --set-rpath /media/sf_pwn_share/ctf-challenges-master/pwn/heap/chunk-extend-shrink/2015_hacklu_bookstore/:/libc.so.6 ./books
注:<libc_ld_name>是libc對應版本的加載程序,可以從這里下載
32.linux方便提高工作效率的一些小命令
find / -name <file-name> 查找名為<filenname>的文件 cat -n <file-name> <file-name>以帶行數的形式展示
grep "<string>" -r <dir> 在dir目錄查找包含string的文件
33.afl qemu模式配置的一些坑,隨緣看懂
https://cloud.tencent.com/developer/article/1128539 https://www.cnblogs.com/WangAoBo/p/8280352.html /usr/include/x86_64-linux-gnu/bits/mman-shared.h +++static int memfd_create (const char *__name, unsigned int __flags) __THROW; make install完把afl-fuzz根目錄下的afl-qemu-trace放到whereis afl-fuzz所在目錄下
人生苦短,為什么不選擇apt-get卻偏偏想自己編譯然后因為各種編譯錯誤懷疑人生呢
apt search afl //找到可用的afl包,我這里是afl++;還有的同學可能是afl包 apt-get install afl++
34.(WSL真香,啊我死了)wsl管理工具,可以遷移wsl安裝路徑
軟件地址
使用說明
wsl修改為阿里源
sudo vim /etc/apt/sources.list :%s/security.ubuntu/mirrors.aliyun/g :%s/archive.ubuntu/mirrors.aliyun/g :wq
wsl安裝圖形界面,工具下載地址
(最新版有bug,我這里安裝的是vcxsrv-64.1.20.1.4),配置地址
配置完成之后wsl內輸入
export DISPLAY=localhost:0 sudo compiz
即可
35.windows+virtualbox雙機調試
36.修改pip源(阿里)
mkdir ~/.pip vim ~/.pip/pip.conf [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host = mirrors.aliyun.com
37.標志寄存器
條件標志:反映包含在ALU算術邏輯運算后的結果特征 OF 溢出標志 :運算時,若操作數超出了機器所能表示的范圍為,則產生溢出,OF=1,否則OF=0 SF 符號標志 ;設置成運算操作結果的符號狀態。當結果為負時,SF=1,否則SF=0 ZF 零標志 結果=0,ZF=1,結果≠0,ZF=0 AF 輔助進位標志 ,運算過程中第三位有進位,置AF=1,否則AF=0 PF 奇偶標志: 當操作數中有偶數個1時,置PF=1,否則PF=0 CF進位標志 : 最高有效位產生的進位值,例如 執行加法指令時,MSB有進,置CF=1;否則CF=0
控制標志:控制執行特殊的功能 DF放向標志:用于字符串操作指令程序設計。 DF置0,則串操作控制處理方向,從帶有最低地址的第一個元素逐個處理,否則,從高向低 ID中斷允許標志: IF=1,CPU允許中斷,IF=0,則CPU關閉中斷 TF跟蹤標志:TF=1,機器進入單步工作方式,每條機器指令執行后,顯示結果及寄存器狀態,若TF=0,則機器處在連續工作方式。此標志為調試機器或調試程序發現故障而設置。
38.機器碼在0x1f<opcode<=0x7f的匯編指令
1.數據傳送: push/pop eax… pusha/popa 2.算術運算: inc/dec eax… sub al, 立即數 sub byte ptr [eax… + 立即數], al dl… sub byte ptr [eax… + 立即數], ah dh… sub dword ptr [eax… + 立即數], esi edi sub word ptr [eax… + 立即數], si di sub al dl…, byte ptr [eax… + 立即數] sub ah dh…, byte ptr [eax… + 立即數] sub esi edi, dword ptr [eax… + 立即數] sub si di, word ptr [eax… + 立即數] 3.邏輯運算: and al, 立即數 and dword ptr [eax… + 立即數], esi edi and word ptr [eax… + 立即數], si di and ah dh…, byte ptr [ecx edx… + 立即數] and esi edi, dword ptr [eax… + 立即數] and si di, word ptr [eax… + 立即數] xor al, 立即數 xor byte ptr [eax… + 立即數], al dl… xor byte ptr [eax… + 立即數], ah dh… xor dword ptr [eax… + 立即數], esi edi xor word ptr [eax… + 立即數], si di xor al dl…, byte ptr [eax… + 立即數] xor ah dh…, byte ptr [eax… + 立即數] xor esi edi, dword ptr [eax… + 立即數] xor si di, word ptr [eax… + 立即數] 4.比較指令: cmp al, 立即數 cmp byte ptr [eax… + 立即數], al dl… cmp byte ptr [eax… + 立即數], ah dh… cmp dword ptr [eax… + 立即數], esi edi cmp word ptr [eax… + 立即數], si di cmp al dl…, byte ptr [eax… + 立即數] cmp ah dh…, byte ptr [eax… + 立即數] cmp esi edi, dword ptr [eax… + 立即數] cmp si di, word ptr [eax… + 立即數] 5.轉移指令: push 56h pop eax cmp al, 43h jnz lable <=> jmp lable 6.交換al, ah push eax xor ah, byte ptr [esp] // ah ^= al xor byte ptr [esp], ah // al ^= ah xor ah, byte ptr [esp] // ah ^= al pop eax 7.清零: push 44h pop eax sub al, 44h ; eax = 0 push esi push esp pop eax xor [eax], esi ; esi = 0
39.virtualbox ubuntu訪問共享文件夾
sudo usermod -a -G vboxsf <user_name> sudo reboot
40.qemu安裝
sudo apt-get install qemu qemu-system
41.沒有libc6-dbg符號表libc里尋找main_arena
42.debian ubuntu更新public key不匹配
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com <key>
43.ubuntu chrome安裝
sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sudo apt-get update sudo apt-get install google-chrome-stable
44.linux在當前目錄下查找包含某行代碼的文件
grep -rn "xxx"
r表示遞歸查找
n表示顯示代碼在文件中出現的行號
"xxx"支持正則查詢
45.v8調試
修改gdbinit
sudo gedit ~/.gdbinit
添加v8安裝目錄下tools目錄里的gdbinit路徑
source path/to/gdbinit
加載v8后設置啟動參數
set args --allow-natives-syntax xxx.js
在要調試的xxx.js中設置斷點
%DebugPrint(obj) // 輸出對象地址 %SystemBreak() // 觸發調試中斷
gdb中r即可
46.v8拉取舊的commit的時候報錯
Error: 4> 4> ____ v8/buildtools at xxx 4> You have unstaged changes. 4> Please commit, stash, or reset.
解決
gclient sync -f
47.gdb寫入棧回溯信息到文件
set logging file xxx set logging on thread apply all bt set logging off
全部調試信息寫入文件,啟動時使用
gdb | tee xxx
48.
| xxd
以16進制顯示控制臺的輸出
49.npm配置代理
修改~/.npmrc文件
proxy=http://127.0.0.1:8123/ https-proxy=http://127.0.0.1:8123 registry=http://registry.npmjs.org/
50.ubuntu 18.04 fuzzilli JavascriptCore編譯
fuzzilli編譯
git clone https://git.webkit.org/git/WebKit.git WebKit
brew:
sudo apt install linuxbrew-wrapper
icu4c:
brew install icu4c
clang:
sudo apt install clang
gedit bashrc:
export PATH=$PATH:"/home/linuxbrew/.linuxbrew/bin"
export PATH=$PATH:"/home/linuxbrew/.linuxbrew/Cellar/icu4c/66.1"
gedit fuzzbuild.sh
export PATH=$PATH:"/home/linuxbrew/.linuxbrew/Cellar/icu4c/66.1"
正常編譯
去掉Tools/gtk/install-dependencies里邊installDependenciesWithApt里邊的pipenv包 執行 Tools/gtk/install-dependencies Tools/Scripts/build-webkit --jsc-only
切換commit,一例
git checkout -b local_branch_name commit_hash
編譯Debug帶符號時使用
./Tools/Scripts/build-jsc --jsc-only --debug --cmakeargs="-DENABLE_STATIC_JSC=ON -DCMAKE_C_COMPILER='/usr/bin/clang' -DCMAKE_CXX_COMPILER='/usr/bin/clang++' -DCMAKE_CXX_FLAGS='-fsanitize-coverage=trace-pc-guard -O3 -lrt'"
51.lldb輸入崩潰日志
bugreport unwind --outfile <path/to/logfile>
52.git 更新本地文件
git fetch --all git reset --hard origin/master git pull
53.linux安裝dotnet
~/.bashrc添加環境變量 export DOTNET_ROOT="/path/to/dotnet/" export PATH=$PATH:"/path/to/dotnet/"
54.linux添加sudo環境變量路徑
修改~/.bashrc
alias sudo='sudo env PATH=$PATH'
55.turbolizer安裝
cd /path/to/v8/tools/turbolizer npm i npm run-script build python -m SimpleHTTPServer 8000 google-chrome訪問 localhost:8000 npm使用代理可以參考上面配置npmrc
56.windbg chrome&firefox符號表
srv*d:symbols*http://chromium-browser-symsrv.commondatastorage.googleapis.com; srv*d:symbols*http://symbols.mozilla.org
總結
- 上一篇: php中__autoload()方法详解
- 下一篇: asp.net url传值,弹窗