aboutsummaryrefslogtreecommitdiffhomepage
path: root/print.html
diff options
context:
space:
mode:
authorjohannst <johannst@users.noreply.github.com>2020-09-16 22:23:09 +0000
committerjohannst <johannst@users.noreply.github.com>2020-09-16 22:23:09 +0000
commit449b66753370d6b64bc9aa7e5c0592ba0fe6f680 (patch)
treeb245d2a3825031336b4a5779f1ab9fc54ce88f2b /print.html
parent78ecd047f07df42673eb63436fe4508d1c3b22cd (diff)
downloadnotes-449b66753370d6b64bc9aa7e5c0592ba0fe6f680.tar.gz
notes-449b66753370d6b64bc9aa7e5c0592ba0fe6f680.zip
deploy: 2e329ad934ef010fd94afe965f14ab895dcb515e
Diffstat (limited to 'print.html')
-rw-r--r--print.html200
1 files changed, 197 insertions, 3 deletions
diff --git a/print.html b/print.html
index 8c982fa..190fceb 100644
--- a/print.html
+++ b/print.html
@@ -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 &amp; 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 &amp; 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 &lt;addr&gt; # reopen current file at &lt;baddr&gt;
</code></pre>
<h1><a class="header" href="#resource-analysis--monitor" id="resource-analysis--monitor">Resource analysis &amp; 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 &lt;cmd&gt;
</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] &lt;file&gt;
-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 &lt;symbol_str&gt;
@@ -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 &quot;Foo&quot;
+</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 |
+ | +------------+ &lt;--- 16 byte aligned (X &amp; ~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 &amp; 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>