strlen-c/tex/main.tex

111 lines
3.6 KiB
TeX
Raw Permalink Normal View History

2024-05-22 11:26:33 +00:00
\documentclass{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[polish]{babel}
\usepackage{listings}
\usepackage{color}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\lstdefinestyle{mystyle}{
backgroundcolor=\color{backcolour},
commentstyle=\color{codegreen},
keywordstyle=\color{magenta},
numberstyle=\tiny\color{codegray},
stringstyle=\color{codepurple},
basicstyle=\ttfamily\footnotesize,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2
}
\lstset{style=mystyle}
\begin{document}
\title{GDB and DASHBOARD}
\author{}
\date{}
\maketitle
\section{Dashboard memory watch}
Dashboard GDB pozwala na dynamiczne obserwowanie określonych obszarów pamięci. Używając funkcji \texttt{dashboard memory watch}, można ustawić obserwację na konkretne adresy pamięci.
\begin{lstlisting}[language=bash]
dashboard memory watch 0x1ff80 128
\end{lstlisting}
\noindent
Powyższa komenda skonfiguruje dashboard do obserwacji 128 bajtów pamięci, począwszy od adresu \texttt{0x1ff80}.
\section{Obserwacja pamięci przy użyciu watch w GDB}
Aby obserwować pamięć na niskim poziomie w GDB, można użyć komendy \texttt{watch} w połączeniu z rzutowaniem i rozmiarem obserwowanego obszaru. Przykładowo, aby obserwować 128 bajty pamięci zaczynając od adresu \texttt{0x1ff80}, użyjemy następującej komendy:
\begin{lstlisting}[language=bash]
watch *(char*)0x1ff80 @ 128
\end{lstlisting}
Ta komenda spowoduje przerwanie wykonania programu, gdy wartości w obserwowanym obszarze pamięci ulegną zmianie. Użycie rzutowania na typ \texttt{(char*)} pozwala na interpretację adresu jako wskaźnika na bajty, a operator \texttt{@} określa ilość obserwowanych bajtów.
\section{Clear Memory}
\subsection{Basic Usage}
To clear 128 bytes of memory starting from 0x1FF80, use the following script:
\begin{lstlisting}[language=bash]
#./gdb/zero.py
import gdb
for i in range(0, 128): # 128 bajtów
gdb.execute("set *((char*)0x1FF80 + %d) = 0" % i)
\end{lstlisting}
Run this script from GDB dashboard by:
\begin{lstlisting}[language=bash]
source gdb/zero.py
\end{lstlisting}
\subsection{Option 2: With Parameters}
To dynamically set the starting address, number of bytes, and pattern from the command line, modify the script as follows:
\begin{lstlisting}[language=bash]
#./gdb/zero_with_params.py
import gdb
import sys
# Parse arguments from the GDB command
args = gdb.string_to_argv(gdb.parameter("args"))
if len(args) != 3:
print("Usage: source gdb/zero_with_params.py <start_address> <num_bytes> <pattern>")
else:
start_address = int(args[0], 16) # Convert start address from hex to int
num_bytes = int(args[1], 16) # Convert number of bytes from hex to int
pattern = int(args[2], 16) # Convert pattern from hex to int
for i in range(num_bytes):
gdb.execute("set *((char*)%d + %d) = %d" % (start_address, i, pattern))
\end{lstlisting}
To run this script with parameters, set GDB's `args` parameter before sourcing the script:
\begin{lstlisting}[language=bash]
set args 0x1FF80 0x80 0x30
source gdb/zero_with_params.py
\end{lstlisting}
This allows specifying the starting address, number of bytes to clear, and the pattern to use directly from the GDB command line.
\end{document}