diff options
author | johannst <johannst@users.noreply.github.com> | 2020-09-16 22:23:09 +0000 |
---|---|---|
committer | johannst <johannst@users.noreply.github.com> | 2020-09-16 22:23:09 +0000 |
commit | 449b66753370d6b64bc9aa7e5c0592ba0fe6f680 (patch) | |
tree | b245d2a3825031336b4a5779f1ab9fc54ce88f2b /print.html | |
parent | 78ecd047f07df42673eb63436fe4508d1c3b22cd (diff) | |
download | notes-449b66753370d6b64bc9aa7e5c0592ba0fe6f680.tar.gz notes-449b66753370d6b64bc9aa7e5c0592ba0fe6f680.zip |
deploy: 2e329ad934ef010fd94afe965f14ab895dcb515e
Diffstat (limited to 'print.html')
-rw-r--r-- | print.html | 200 |
1 files changed, 197 insertions, 3 deletions
@@ -83,7 +83,7 @@ <nav id="sidebar" class="sidebar" aria-label="Table of contents"> <div id="sidebar-scrollbox" class="sidebar-scrollbox"> - <ol class="chapter"><li class="expanded "><a href="misc/index.html"><strong aria-hidden="true">1.</strong> Misc</a></li><li><ol class="section"><li class="expanded "><a href="misc/zsh.html"><strong aria-hidden="true">1.1.</strong> zsh</a></li><li class="expanded "><a href="misc/bash.html"><strong aria-hidden="true">1.2.</strong> bash</a></li><li class="expanded "><a href="misc/fish.html"><strong aria-hidden="true">1.3.</strong> fish</a></li><li class="expanded "><a href="misc/tmux.html"><strong aria-hidden="true">1.4.</strong> tmux</a></li><li class="expanded "><a href="misc/git.html"><strong aria-hidden="true">1.5.</strong> git</a></li><li class="expanded "><a href="misc/awk.html"><strong aria-hidden="true">1.6.</strong> awk</a></li><li class="expanded "><a href="misc/emacs.html"><strong aria-hidden="true">1.7.</strong> emacs</a></li><li class="expanded "><a href="misc/gdb.html"><strong aria-hidden="true">1.8.</strong> gdb</a></li><li class="expanded "><a href="misc/radare2.html"><strong aria-hidden="true">1.9.</strong> radare2</a></li></ol></li><li class="expanded "><a href="monitor/index.html"><strong aria-hidden="true">2.</strong> Resource analysis & monitor</a></li><li><ol class="section"><li class="expanded "><a href="monitor/lsof.html"><strong aria-hidden="true">2.1.</strong> lsof</a></li><li class="expanded "><a href="monitor/pidstat.html"><strong aria-hidden="true">2.2.</strong> pidstat</a></li><li class="expanded "><a href="monitor/pgrep.html"><strong aria-hidden="true">2.3.</strong> pgrep</a></li><li class="expanded "><a href="monitor/pmap.html"><strong aria-hidden="true">2.4.</strong> pmap</a></li><li class="expanded "><a href="monitor/pstack.html"><strong aria-hidden="true">2.5.</strong> pstack</a></li></ol></li><li class="expanded "><a href="trace_profile/index.html"><strong aria-hidden="true">3.</strong> Trace and Profile</a></li><li><ol class="section"><li class="expanded "><a href="trace_profile/strace.html"><strong aria-hidden="true">3.1.</strong> strace</a></li><li class="expanded "><a href="trace_profile/ltrace.html"><strong aria-hidden="true">3.2.</strong> ltrace</a></li><li class="expanded "><a href="trace_profile/perf.html"><strong aria-hidden="true">3.3.</strong> perf</a></li><li class="expanded "><a href="trace_profile/oprofile.html"><strong aria-hidden="true">3.4.</strong> OProfile</a></li><li class="expanded "><a href="trace_profile/time.html"><strong aria-hidden="true">3.5.</strong> time</a></li></ol></li><li class="expanded "><a href="binary/index.html"><strong aria-hidden="true">4.</strong> Binary</a></li><li><ol class="section"><li class="expanded "><a href="binary/od.html"><strong aria-hidden="true">4.1.</strong> od</a></li><li class="expanded "><a href="binary/xxd.html"><strong aria-hidden="true">4.2.</strong> xxd</a></li><li class="expanded "><a href="binary/readelf.html"><strong aria-hidden="true">4.3.</strong> readelf</a></li><li class="expanded "><a href="binary/objdump.html"><strong aria-hidden="true">4.4.</strong> objdump</a></li><li class="expanded "><a href="binary/nm.html"><strong aria-hidden="true">4.5.</strong> nm</a></li></ol></li><li class="expanded "><a href="development/index.html"><strong aria-hidden="true">5.</strong> Development</a></li><li><ol class="section"><li class="expanded "><a href="development/c++filt.html"><strong aria-hidden="true">5.1.</strong> c++filt</a></li><li class="expanded "><a href="development/c++.html"><strong aria-hidden="true">5.2.</strong> c++</a></li><li class="expanded "><a href="development/glibc.html"><strong aria-hidden="true">5.3.</strong> glibc</a></li><li class="expanded "><a href="development/gcc.html"><strong aria-hidden="true">5.4.</strong> gcc</a></li><li class="expanded "><a href="development/ld.so.html"><strong aria-hidden="true">5.5.</strong> ld.so</a></li></ol></li></ol> + <ol class="chapter"><li class="expanded "><a href="tools/index.html"><strong aria-hidden="true">1.</strong> Tools</a></li><li><ol class="section"><li class="expanded "><a href="tools/zsh.html"><strong aria-hidden="true">1.1.</strong> zsh</a></li><li class="expanded "><a href="tools/bash.html"><strong aria-hidden="true">1.2.</strong> bash</a></li><li class="expanded "><a href="tools/fish.html"><strong aria-hidden="true">1.3.</strong> fish</a></li><li class="expanded "><a href="tools/tmux.html"><strong aria-hidden="true">1.4.</strong> tmux</a></li><li class="expanded "><a href="tools/git.html"><strong aria-hidden="true">1.5.</strong> git</a></li><li class="expanded "><a href="tools/awk.html"><strong aria-hidden="true">1.6.</strong> awk</a></li><li class="expanded "><a href="tools/emacs.html"><strong aria-hidden="true">1.7.</strong> emacs</a></li><li class="expanded "><a href="tools/gdb.html"><strong aria-hidden="true">1.8.</strong> gdb</a></li><li class="expanded "><a href="tools/radare2.html"><strong aria-hidden="true">1.9.</strong> radare2</a></li></ol></li><li class="expanded "><a href="monitor/index.html"><strong aria-hidden="true">2.</strong> Resource analysis & monitor</a></li><li><ol class="section"><li class="expanded "><a href="monitor/lsof.html"><strong aria-hidden="true">2.1.</strong> lsof</a></li><li class="expanded "><a href="monitor/pidstat.html"><strong aria-hidden="true">2.2.</strong> pidstat</a></li><li class="expanded "><a href="monitor/pgrep.html"><strong aria-hidden="true">2.3.</strong> pgrep</a></li><li class="expanded "><a href="monitor/pmap.html"><strong aria-hidden="true">2.4.</strong> pmap</a></li><li class="expanded "><a href="monitor/pstack.html"><strong aria-hidden="true">2.5.</strong> pstack</a></li></ol></li><li class="expanded "><a href="trace_profile/index.html"><strong aria-hidden="true">3.</strong> Trace and Profile</a></li><li><ol class="section"><li class="expanded "><a href="trace_profile/strace.html"><strong aria-hidden="true">3.1.</strong> strace</a></li><li class="expanded "><a href="trace_profile/ltrace.html"><strong aria-hidden="true">3.2.</strong> ltrace</a></li><li class="expanded "><a href="trace_profile/perf.html"><strong aria-hidden="true">3.3.</strong> perf</a></li><li class="expanded "><a href="trace_profile/oprofile.html"><strong aria-hidden="true">3.4.</strong> OProfile</a></li><li class="expanded "><a href="trace_profile/time.html"><strong aria-hidden="true">3.5.</strong> time</a></li></ol></li><li class="expanded "><a href="binary/index.html"><strong aria-hidden="true">4.</strong> Binary</a></li><li><ol class="section"><li class="expanded "><a href="binary/od.html"><strong aria-hidden="true">4.1.</strong> od</a></li><li class="expanded "><a href="binary/xxd.html"><strong aria-hidden="true">4.2.</strong> xxd</a></li><li class="expanded "><a href="binary/readelf.html"><strong aria-hidden="true">4.3.</strong> readelf</a></li><li class="expanded "><a href="binary/objdump.html"><strong aria-hidden="true">4.4.</strong> objdump</a></li><li class="expanded "><a href="binary/nm.html"><strong aria-hidden="true">4.5.</strong> nm</a></li></ol></li><li class="expanded "><a href="development/index.html"><strong aria-hidden="true">5.</strong> Development</a></li><li><ol class="section"><li class="expanded "><a href="development/c++filt.html"><strong aria-hidden="true">5.1.</strong> c++filt</a></li><li class="expanded "><a href="development/c++.html"><strong aria-hidden="true">5.2.</strong> c++</a></li><li class="expanded "><a href="development/glibc.html"><strong aria-hidden="true">5.3.</strong> glibc</a></li><li class="expanded "><a href="development/gcc.html"><strong aria-hidden="true">5.4.</strong> gcc</a></li><li class="expanded "><a href="development/ld.so.html"><strong aria-hidden="true">5.5.</strong> ld.so</a></li></ol></li><li class="expanded "><a href="arch/index.html"><strong aria-hidden="true">6.</strong> Arch</a></li><li><ol class="section"><li class="expanded "><a href="arch/x86_64.html"><strong aria-hidden="true">6.1.</strong> x86_64</a></li></ol></li></ol> </div> <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div> </nav> @@ -150,7 +150,19 @@ <div id="content" class="content"> <main> - <h1><a class="header" href="#zsh1" id="zsh1">zsh(1)</a></h1> + <h1><a class="header" href="#tools" id="tools">Tools</a></h1> +<ul> +<li><a href="tools/./zsh.html">zsh</a></li> +<li><a href="tools/./bash.html">bash</a></li> +<li><a href="tools/./fish.html">fish</a></li> +<li><a href="tools/./tmux.html">tmux</a></li> +<li><a href="tools/./git.html">git</a></li> +<li><a href="tools/./awk.html">awk</a></li> +<li><a href="tools/./emacs.html">emacs</a></li> +<li><a href="tools/./gdb.html">gdb</a></li> +<li><a href="tools/./radare2.html">radare2</a></li> +</ul> +<h1><a class="header" href="#zsh1" id="zsh1">zsh(1)</a></h1> <h2><a class="header" href="#keybindings" id="keybindings">Keybindings</a></h2> <p>Change input mode:</p> <pre><code class="language-zsh">bindkey -v change to vi keymap @@ -287,7 +299,7 @@ ${foo/pattern/string} # replace pattern with string when expanding foo # '%' pattern match at end </code></pre> <blockquote> -<p>Note: <code>prefix</code>/<code>suffix</code>/<code>pattern</code> are expanded as <a href="misc/bash.html#pathname">pathnames</a>.</p> +<p>Note: <code>prefix</code>/<code>suffix</code>/<code>pattern</code> are expanded as <a href="tools/bash.html#pathname">pathnames</a>.</p> </blockquote> <h3><a class="header" href="#pathname" id="pathname">Pathname</a></h3> <pre><code class="language-bash">* match any string @@ -1083,6 +1095,13 @@ executed. To workaround that bug one can create a wrapper function which calls oob <addr> # reopen current file at <baddr> </code></pre> <h1><a class="header" href="#resource-analysis--monitor" id="resource-analysis--monitor">Resource analysis & monitor</a></h1> +<ul> +<li><a href="monitor/./lsof.html">lsof</a></li> +<li><a href="monitor/./pidstat.html">pidstat</a></li> +<li><a href="monitor/./pgrep.html">pgrep</a></li> +<li><a href="monitor/./pmap.html">pmap</a></li> +<li><a href="monitor/./pstack.html">pstack</a></li> +</ul> <h1><a class="header" href="#lsof8" id="lsof8">lsof(8)</a></h1> <pre><code class="language-markdown">lsof -a ......... AND slection filters instead ORing (OR: default) @@ -1157,6 +1176,13 @@ major_pagefault: Happens when the page needed is NOT in memory, the kernel Dump stack for all threads of process. </code></pre> <h1><a class="header" href="#trace-and-profile" id="trace-and-profile">Trace and Profile</a></h1> +<ul> +<li><a href="trace_profile/./strace.html">strace</a></li> +<li><a href="trace_profile/./ltrace.html">ltrace</a></li> +<li><a href="trace_profile/./perf.html">perf</a></li> +<li><a href="trace_profile/./oprofile.html">OProfile</a></li> +<li><a href="trace_profile/./time.html">time</a></li> +</ul> <h1><a class="header" href="#strace1" id="strace1">strace(1)</a></h1> <pre><code class="language-markdown">strace [opts] [prg] -f .......... follow child processes on fork(2) @@ -1255,6 +1281,13 @@ ophelp show supported hw/sw events /usr/bin/time -v <cmd> </code></pre> <h1><a class="header" href="#binary" id="binary">Binary</a></h1> +<ul> +<li><a href="binary/./od.html">od</a></li> +<li><a href="binary/./xxd.html">xxd</a></li> +<li><a href="binary/./readelf.html">readelf</a></li> +<li><a href="binary/./objdump.html">objdump</a></li> +<li><a href="binary/./nm.html">nm</a></li> +</ul> <h1><a class="header" href="#od1" id="od1">od(1)</a></h1> <pre><code class="language-markdown"> od [opts] <file> -An don't print addr info @@ -1353,6 +1386,13 @@ the <code>.rodata</code> section as follows:</p> -u undefined only </code></pre> <h1><a class="header" href="#development" id="development">Development</a></h1> +<ul> +<li><a href="development/./c++filt.html">c++filt</a></li> +<li><a href="development/./c++.html">c++</a></li> +<li><a href="development/./glibc.html">glibc</a></li> +<li><a href="development/./gcc.html">gcc</a></li> +<li><a href="development/./ld.so.html">ld.so</a></li> +</ul> <h1><a class="header" href="#cfilt1" id="cfilt1">c++filt(1)</a></h1> <h2><a class="header" href="#demangle-symbol" id="demangle-symbol">Demangle symbol</a></h2> <pre><code class="language-markdown"> c++-filt <symbol_str> @@ -1560,6 +1600,160 @@ search for and where to put the function pointer: </code></pre> As we can see the offset from relocation at index <code>0</code> points to <code>GOT[3]</code>.</li> </ul> +<h1><a class="header" href="#arch" id="arch">Arch</a></h1> +<ul> +<li><a href="arch/./x86_64.html">x86_64</a></li> +</ul> +<h1><a class="header" href="#x86_64" id="x86_64">x86_64</a></h1> +<p>keywords: x86_64, x86, abi</p> +<ul> +<li>64bit synonyms: <code>x86_64</code>, <code>x64</code>, <code>amd64</code>, <code>intel 64</code></li> +<li>32bit synonyms: <code>x86</code>, <code>ia32</code>, <code>i386</code></li> +<li>ISA type: <code>CISC</code></li> +<li>Endianness: <code>little</code></li> +</ul> +<h2><a class="header" href="#registers" id="registers">Registers</a></h2> +<h3><a class="header" href="#general-purpose-register" id="general-purpose-register">General purpose register</a></h3> +<pre><code class="language-markdown">bytes +[7:0] [3:0] [1:0] [1] [0] desc +---------------------------------------------------------- +rax eax ax ah al accumulator +rbx ebx bx bh bl base register +rcx ecx cx ch cl counter +rdx edx dx dh dl data register +rsi esi si - sil source index +rdi edi di - dil destination index +rbp ebp bp - bpl base pointer +rsp esp sp - spl stack pointer +r8-15 rNd rNw - rNb +</code></pre> +<h3><a class="header" href="#special-register" id="special-register">Special register</a></h3> +<pre><code class="language-markdown">bytes +[7:0] [3:0] [1:0] desc +--------------------------------------------------- +rflags eflags flags flags register +rip eip ip instruction pointer +</code></pre> +<h3><a class="header" href="#flags-register" id="flags-register">FLAGS register</a></h3> +<pre><code class="language-markdown">rflags +bits desc +----------------------------- +[11] OF overflow flag +[10] DF direction flag + [7] SF sign flag + [6] ZF zero flag + [4] AF auxiliary carry flag + [2] PF parity flag + [0] CF carry flag +</code></pre> +<h2><a class="header" href="#addressing" id="addressing">Addressing</a></h2> +<pre><code class="language-asm">movw [rax], rbx // save val in rbx at [rax] +movw [imm], rbx // save val in rbx at [imm] +movw rax, [rbx+4*rcx] // load val at [rbx+4*rcx] into rax +</code></pre> +<p><code>rip</code> relative addressing:</p> +<pre><code class="language-asm">lea rax, [rip+.my_str] // load addr of .my_str into rax +... +.my_str: +.asciz "Foo" +</code></pre> +<h2><a class="header" href="#size-directives" id="size-directives">Size directives</a></h2> +<p>Explicitly specify size of the operation.</p> +<pre><code class="language-nasm">mov byte ptr [rax], 0xff // save 1 byte(s) at [rax] +mov word ptr [rax], 0xff // save 2 byte(s) at [rax] +mov dword ptr [rax], 0xff // save 4 byte(s) at [rax] +mov qword ptr [rax], 0xff // save 8 byte(s) at [rax] +</code></pre> +<h2><a class="header" href="#a-hrefhttpswwwuclibcorgdocspsabi-x86_64pdfsysv-x86_64-abia" id="a-hrefhttpswwwuclibcorgdocspsabi-x86_64pdfsysv-x86_64-abia"><a href="https://www.uclibc.org/docs/psABI-x86_64.pdf">SysV x86_64 ABI</a></a></h2> +<h3><a class="header" href="#passing-arguments-to-functions" id="passing-arguments-to-functions">Passing arguments to functions</a></h3> +<ul> +<li>Integer/Pointer arguments +<pre><code class="language-markdown">reg arg +----------- +rdi 1 +rsi 2 +rdx 3 +rcx 4 +r8 5 +r9 6 +</code></pre> +</li> +<li>Floating point arguments +<pre><code class="language-markdown">reg arg +----------- +xmm0 1 + .. .. +xmm7 7 +</code></pre> +</li> +<li>Additional arguments are passed on the stack. Arguments are pushed +right-to-left (RTL), meaning next arguments are closer to current <code>rsp</code>.</li> +</ul> +<h3><a class="header" href="#return-values-from-functions" id="return-values-from-functions">Return values from functions</a></h3> +<ul> +<li>Integer/Pointer return values +<pre><code class="language-markdown">reg size +----------------- +rax 64 bit +rax+rdx 128 bit +</code></pre> +</li> +<li>Floating point return values: +<pre><code class="language-markdown">reg size +------------------- +xmm0 64 bit +xmm0+xmm1 128 bit +</code></pre> +</li> +</ul> +<h3><a class="header" href="#caller-saved-registers" id="caller-saved-registers">Caller saved registers</a></h3> +<p>Caller must save these registers if they should be preserved across function +calls.</p> +<ul> +<li><code>rax</code></li> +<li><code>rcx</code></li> +<li><code>rdx</code></li> +<li><code>rsi</code></li> +<li><code>rdi</code></li> +<li><code>rsp</code></li> +<li><code>r8</code> - <code>r11</code></li> +</ul> +<h3><a class="header" href="#callee-saved-registers" id="callee-saved-registers">Callee saved registers</a></h3> +<p>Caller can expect these registers to be preserved across function calls. Callee +must must save these registers in case they are used.</p> +<ul> +<li><code>rbx</code></li> +<li><code>rbp</code></li> +<li><code>r12</code> – <code>r15</code></li> +</ul> +<h3><a class="header" href="#stack" id="stack">Stack</a></h3> +<ul> +<li>grows downwards</li> +<li>frames aligned on 16 byte boundary +<pre><code class="language-text">HI ADDR + | +------------+ + | | prev frame | + | +------------+ <--- 16 byte aligned (X & ~0xf) + | [rbp+8] | saved RIP | + | [rbp] | saved RBP | + | [rbp-8] | func stack | + | | ... | + v +------------+ +LO ADDR +</code></pre> +</li> +</ul> +<h2><a class="header" href="#references" id="references">References</a></h2> +<ul> +<li><a href="https://www.uclibc.org/docs/psABI-x86_64.pdf">SystemV AMD64 ABI</a></li> +<li><a href="https://www.amd.com/system/files/TechDocs/24592.pdf">AMD64 Vol1: Application Programming</a></li> +<li><a href="https://www.amd.com/system/files/TechDocs/24593.pdf">AMD64 Vol2: System Programming</a></li> +<li><a href="https://www.amd.com/system/files/TechDocs/24594.pdf">AMD64 Vol3: General-Purpose & System Instructions</a></li> +<li><a href="https://cs.brown.edu/courses/cs033/docs/guides/x64_cheatsheet.pdf">X86_64 Cheat-Sheet</a></li> +<li><a href="https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-software-developers-manual-volume-1-basic-architecture.html">Intel 64 Vol1: Basic Architecture</a></li> +<li><a href="https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-2a-2b-2c-and-2d-instruction-set-reference-a-z.html">Intel 64 Vol2: Instruction Set Reference</a></li> +<li><a href="https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-3a-3b-3c-and-3d-system-programming-guide.html">Intel 64 Vol3: System Programming Guide</a></li> +</ul> </main> |