2

THIS IS NO DUPLICATED QUESTION because I get following error at removing the listing environment around my minted env.: ERROR:

! Package tikz Error: Sorry, some package has redefined the meaning of the math
-mode dollar sign. This is incompatible with tikz and its calc library and migh
t cause unrecoverable errors.

See the tikz package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.17   \PYG{n+nf}{push} \PYG{n+nb}{ebp}

===========================================================================

QUESTION

I have following latex script:

% page 6
\sffamily
\begin{figure}[h]
  \centering
  \includegraphics[trim={1in 1in 1in 1in}, clip, scale = 0.5]{stack_block}
  \caption{stack\_block.png}
\end{figure}
\noindent
Der Stack ist inkrementiert aufgebaut. D.h., dass er von der größten zur kleinsten Adresse \textit{aufsteigt}. In der Illustration ist die Speicherplatzreservierung sowie die Operation mit Variablen gekennzeichnet. Um direkten Zugriff auf Variablen aus dem Stack zu haben, muss bevor die Variable in den Stack geschrieben wird, der \textit{Stack Bottom Pointer (EBP)} auf die aktuelle Adresse des \textit{Stack Pointers (ESP)} gesetzt werden. Anschließend wird ein beliebiger Wert per \textit{push register} in den Stack verschoben. Dabei wird der Wert aus \textit{register} an die Position \textit{ESP} geschrieben und \textit{ESP} wird um die Speichergröße von \textit{register} dekrementiert.
\newline
Nachfolgend ist ein Assembler Code, der die Operationen mit dem Stack verdeutlicht, dargestellt. Dieser ist in NASM geschrieben und für 32bit Systeme.
\ttfamily\setstretch{1.0}
\begin{listing}[ht]
\begin{minted}[
xleftmargin=0.4in,
linenos
]{nasm}
; test.asm
; TEST
; ---------
;
; nasm -f elf test.asm
; ld -m elf_i386 -s -o test test.o

section .data

section .bss

section .text
GLOBAL _start

_start:
  push ebp

  mov ebp, esp

  mov ecx, dword 01h
  push ecx

  mov eax, [ebp - 4]
  mov ebx, 01h

  mov esp, ebp
  pop ebp

  cmp ebx, eax
  je exit

  mov ebx, 1
  mov al, 1
  int 80h

 exit:
  xor ebx, ebx
  mov al, 1
  int 80h
\end{minted}
\caption{test.asm}
\end{listing}
\setstretch{1.5}

when I put the code listing onto a new page, it starts directly at the top. But with the current setting, it looks like:

here

but what I want is a direct start under the last line of text and the code listing should be broken over the page break. how?

EDIT: EXAMPLE CODE

Here my latex code so you can test it by your self. I am using xelatex and the problem occurs at end of the document (last page).

%%%%%%%%%%%%%%%%%%%
% compile with: xelatex --shell-escape [file.tex]
%%%%%%%%%%%%%%%%%%%

% page setup
\documentclass[10pt, letterpaper]{article}

%%%%%%%%%%%%%%%%%%%
% package imports
\usepackage{fontspec}                         % font
\usepackage[utf8]{inputenc}                   % encoding
\usepackage{minted}                           % syntax highlighting
\usepackage{fancyhdr}                         % headers/ footers
\usepackage[margin=0.89in]{geometry}          % page margins setup
\usepackage{lastpage}                         % number of last page
\usepackage{graphicx}                         % to embed graphics
\usepackage{tikz}                             % to draw geometrics
\usepackage{eso-pic}                          % add picture/background commands to each page
\usepackage{xcolor}                           % colors
\usepackage{titlesec}                         % paragraph and section formatting
\usepackage{setspace}                         % line spacing

%%%%%%%%%%%%%%%%%%%
% configurations

% font setup
\setsansfont{Ubuntu}       % Sans: Ubuntu - use \sffamily or \textsf{}
\setmonofont{Ubuntu Mono}  % typewriter: Ubuntu Mono - use \ttfamily or \texttt{}
\setmainfont[Ligatures=TeX,Scale=0.95]{Ubuntu}

% graphics path
\graphicspath{{resources/}}

% minted theme
\usemintedstyle{pastie} % monokai, add to minted options: bgcolor=bggray
% monokai: \renewcommand\theFancyVerbLine{\ttfamily\textcolor[rgb]{0.48,0.48,0.48}{\arabic{FancyVerbLine}}}
\renewcommand\theFancyVerbLine{\ttfamily\textcolor[rgb]{0,0,0}{\arabic{FancyVerbLine}}}

% color definitions
% monokai
% \definecolor{bggray}{cmyk}{0.03, 0.0, 0.15, 0.84}

% section/paragraph styling
\titleformat*{\section}{\bfseries\sffamily}
\titleformat*{\subsection}{\bfseries\sffamily}
\titleformat*{\subsubsection}{\bfseries\sffamily}
\titleformat*{\paragraph}{\bfseries\sffamily}
\titleformat*{\subparagraph}{\bfseries\sffamily}

% lists
\renewcommand\contentsname{Inhalt}
\renewcommand\listfigurename{Bilder}
\renewcommand\figurename{Bild}
\renewcommand\listoflistingscaption{Programmcodes}
\renewcommand\listingscaption{Programmcode}

\newcommand\ownit[1]{\textcolor[rgb]{0,0.28,1}{\textit{#1}}}

% line spacing
\setstretch{1.5}

% enable tikz coordinate calculation
\usetikzlibrary{calc}

% defining tab
\newcommand\tab[1][0.2in]{\hspace*{#1}}

% page borders
\AddToShipoutPictureBG{
  \begin{tikzpicture}[overlay,remember picture]
    \draw[line width=2pt]
      ($ (current page.north west) + (0.79in, -0.79in) $)
      rectangle
      ($ (current page.south east) + (-0.79in, 0.79in) $);
  \end{tikzpicture}
}

% headers/footers
\renewcommand\footrulewidth{0pt}     % footer line width
\renewcommand\headrulewidth{0pt}     % header line width
\pagestyle{fancyplain}                 % headers/footers on all pages
\lhead{\sffamily{\textbf{Exploiting Seminar}}} % left header content
\chead{}
\rhead{\sffamily{\input{"|resources/dater.sh"}}}                                        % right header content
\lfoot{\sffamily{Credits: Prutheus $\rightarrow$ www.prutheus.com / mail@prutheus.com}} % left footer content
\cfoot{}
\rfoot{\sffamily{\thepage/\pageref{LastPage}}} % right footer content

%%%%%%%%%%%%%%%%%%%
% document start
\begin{document}

% title page
\sffamily
\title{\textbf{Exploiting Seminar}}
\author{Prutheus}
\date{\input{"|resources/dater.sh"}}

\maketitle

\vspace*\fill
\begin{figure}[h]
  \flushright
  \includegraphics[trim={0 0.5in 0 0}, scale = 1.0]{sign}
\end{figure}
\begin{flushright}
  \textcolor[rgb]{0.6,0.6,0.66}{\rule{1.5in}{0.8pt}}
\end{flushright}

\newpage

% page 2
\tableofcontents
\listoffigures
\listoflistings

\newpage

% page 3
\sffamily
\section{Zusammenfassung}
In dem \ownit{Exploiting Seminar} werden grundlegende Fähigkeiten im Bereich des \ownit{Exploiting} gelehrt. Dabei wird die Funktionsweise von Programmen auf Rechnern dargestellt, sowie der Eingriff in den Prozessablauf. Um dieses Vorhaben realisieren zu können, wird Assembler-Programmierung hinsichtlicht der Erstellung von \ownit{Shellcodes} präsentiert.
\section{Ziel}
Ziel des \ownit{Exploiting Seminars} ist die Vermittlung von Kernkompetenzen im Bereich des Prozessablaufes von Programmen sowie der zielgerichtete Eingriff in die Prozessfunktionalität.

\newpage

% page 4
\sffamily
\section{Programmstart}
Bei einem \ownit{Programmstart} wird der Maschinencode eines Programms in den Arbeitsspeicher geladen und schrittweise abgearbeitet. Dabei gilt es folgende Bereiche eines Programms zu unterscheiden:
\subsection{Speichersektionen}
\subsubsection{section .data:\tab\ownit{Datenbereich}}
Im \ownit{Datenebreich} werden zum Start geladene Daten oder Konstanten deklariert. Dabei wird eine fixe Speicherregion reserviert, welche später nicht mehr expandiert werden kann. Während der Prozesslaufzeit können diese Daten nicht mehr geändert werden.
\subsubsection{section .bss:\tab\ownit{Variablenbereich}}
Im \ownit{Variablenbereich} werden Variablen deklariert. Das heißt es wird eine vordefinierte Speicherblockgröße für Daten, welche während der Prozesslaufzeit beschrieben und gelesen werden können, im Arbeitsspeicher reserviert. Diese Puffer-Speicherregion wird mit Nullen gefüllt.
\subsubsection{section .text:\tab\ownit{Programmbereich}}
Im \ownit{Programmbereich} wird der aktuelle Programmcode hinterlegt. Zu Beginn dieses Bereiches wird außerdem der Programmeinstiegspunkt für den Kernel festgelegt. Die Sektionsgröße wird fixiert, eine spätere Expansion ist nicht möglich.
\subsection{Speichersegmente}
Der Systemspeicher wird in sogenannte \ownit{Speichersegmente} aufgeteilt.
\subsection{Datensegment}
Das \ownit{Datensegment} setzt sich aus den .data und den .bss Sektionen zusammen.
\subsection{Codesegment}
Das \ownit{Codesegment} besteht aus der .text Sektion.
\subsection{Stack}
Der \ownit{Stack} beinhaltet Daten und Werte, welche im laufenden Programm zwischen Funktionsaufrufen ausgetauscht werden.

\newpage

% page 5
\sffamily
\section{Stack}
Da der Stack eine wichtige Funktion beim \ownit{Shellcoding} und \ownit{Injecting} darstellt, wird dieser nun ausführlicher betrachtet.\newline
Der Stack belegt, wie bereits erwähnt, nur einen Teil des Speichers der für die Programmausführung reserviert wird. Hier eine schematische Darstellung des gesamten Speicherblocks:
\begin{figure}[h]
  \centering
  \includegraphics[trim={1.7in 1.7in 1.7in 1.7in}, clip, scale = 0.5]{memory_block}
  \caption{memory\_block.png}
\end{figure}
\newline
Wird der Stack nun genauer betrachtet, so stellt man fest, dass dieser nochmals unterteilt ist, in einzelne \ownit{Spei-cheradressen}. Dabei ist die maximale Anzahl an Bits, die in einer Adresse hinterlegt werden können, genauso groß, wie die Rechengröße des verbauten Prozessors. Da im \ownit{Exploiting Seminar} hauptsächlich \ownit{Shellcodes} für 32bit Prozessoren entwickelt werden, ist somit die Speichergröße einer Adresse auf 32bit, also 4 Bytes bzw. einem double word (\ownit{dword}) begrenzt. Hier eine Datstellung des Stacks:

\newpage

% page 6
\sffamily
\begin{figure}[h]
  \centering
  \includegraphics[trim={1in 1in 1in 1in}, clip, scale = 0.5]{stack_block}
  \caption{stack\_block.png}
\end{figure}
\noindent
Der Stack ist inkrementiert aufgebaut. D.h., dass er von der größten zur kleinsten Adresse \ownit{aufsteigt}. In der Illustration ist die Speicherplatzreservierung sowie die Operation mit Variablen gekennzeichnet. Um direkten Zugriff auf Variablen aus dem Stack zu haben, muss bevor die Variable in den Stack geschrieben wird, der \ownit{Stack Bottom Pointer (EBP)} auf die aktuelle Adresse des \ownit{Stack Pointers (ESP)} gesetzt werden. Anschließend wird ein beliebiger Wert per \ownit{push register} in den Stack verschoben. Dabei wird der Wert aus \ownit{register} an die Position \ownit{ESP} geschrieben und \ownit{ESP} wird um die Speichergröße von \ownit{register} dekrementiert.
\newline
Nachfolgend ist ein Assembler Code, der die Operationen mit dem Stack verdeutlicht, dargestellt. Dieser ist in NASM geschrieben und für 32bit Systeme.
\ttfamily\setstretch{1.0}
\begin{listing}[h]
\begin{minted}[
xleftmargin=0.4in,
linenos
]{nasm}
; test.asm
; TEST
; ---------
;
; nasm -f elf test.asm
; ld -m elf_i386 -s -o test test.o

section .data

section .bss

section .text
GLOBAL _start

_start:
  push ebp

  mov ebp, esp

  mov ecx, dword 01h
  push ecx

  mov eax, [ebp - 4]
  mov ebx, 01h

  mov esp, ebp
  pop ebp

  cmp ebx, eax
  je exit

  mov ebx, 1
  mov al, 1
  int 80h

 exit:
  xor ebx, ebx
  mov al, 1
  int 80h
\end{minted}
\caption{test.asm}
\end{listing}
\setstretch{1.5}

%%%%%%%%%%%%%%%%%%%
% document end
\end{document}
  • Hey, maybe you can help me solving my problem? – Prutheus Dec 26 '16 at 15:45
  • A minimal working example (MWE) would help that others can reproduce the problem. – Heiko Oberdiek Dec 26 '16 at 15:50
  • @HeikoOberdiek I have added code now, please check yourself! – Prutheus Dec 26 '16 at 16:09
  • listing is a floating environment that cannot break across pages. (And by the way, your example is not minimal, most of the code and contents is actually irrelevant for the question you ask.) – Torbjørn T. Dec 26 '16 at 16:26
  • @TorbjørnT. so what else should I use instead of listing? – Prutheus Dec 26 '16 at 16:35
0

Your problem occurs because listing is an environment that doesn't allow pagebreaks. One option could be to remove the listing environment, and use \captionof from the caption package, which allows you to add captions outside of floating environments like listing.

Now, there appears to be some sort of clash between the tikzpicture used to draw the frame in the \AddToShipoutPictureBG and minted, or at least a minted code listing that breaks across pages. One way around that could be to not use TikZ for the frame, but, for example, good old picture mode. Note that to be able to use \paperheight etc. in the length of the \lines, I loaded the picture package, cf. How to use \textwidth (or any variable) in a picture environment.

The frame-drawing code I came up with is as follows:

% page borders
\AddToShipoutPictureBG{%
\begin{picture}(0,0)
\linethickness{2pt}
\put(\dimexpr0.79in-1pt,0.79in){\line(1,0){\dimexpr\paperwidth-0.79in-0.79in+1pt}}
\put(0.79in,\dimexpr0.79in-1pt){\line(0,1){\dimexpr\paperheight-0.79in-0.79in+1pt}}
\put(\dimexpr0.79in-1pt,\dimexpr\paperheight-0.79in){\line(1,0){\dimexpr\paperwidth-0.79in-0.79in+1pt}}
\put(\dimexpr\paperwidth-0.79in,\dimexpr0.79in-1pt){\line(0,1){\dimexpr\paperheight-0.79in-0.79in+2pt}}
\end{picture}%

Complete working code below. I also implemented the suggestions I mentioned in a comment above:

  • Removed the inputenc package. xelatex (and lualatex) assumes utf8, and inputenc should not be used.

  • Removed the figure environment on the title page. You don't need a figure environment to use \includegraphics, seems here like the flushright environment alone should be sufficient.

  • Instead of having a \sffamily every page (which is redundant in the first place, the one you have right after \begin{document} will affect everything that comes after it), I added \renewcommand\familydefault{\sfdefault} to the preamble, which sets sans serif as default.

  • For the minted code block, instead of the \ttfamily preceding it, I added fontfamily=tt to the environment options.

%%%%%%%%%%%%%%%%%%%
% compile with: xelatex --shell-escape [file.tex]
%%%%%%%%%%%%%%%%%%%

% page setup
\documentclass[10pt, a4paper, demo]{article}

%%%%%%%%%%%%%%%%%%%
% package imports
\usepackage{fontspec}                         % font
\usepackage{minted}                           % syntax highlighting
\usepackage{fancyhdr}                         % headers/ footers
\usepackage[margin=0.89in]{geometry}          % page margins setup
\usepackage{lastpage}                         % number of last page
\usepackage{graphicx}                         % to embed graphics
\usepackage{eso-pic}                          % add picture/background commands to each page
\usepackage{xcolor}                           % colors
\usepackage{titlesec}                         % paragraph and section formatting
\usepackage{setspace}                         % line spacing
\usepackage{caption} % for \captionof (and caption customization)
\usepackage{picture} % allows for use of lengths directly in picture-environments


%%%%%%%%%%%%%%%%%%%
% configurations

% font setup
\setsansfont{Ubuntu}       % Sans: Ubuntu - use \sffamily or \textsf{}
\setmonofont{Ubuntu Mono}  % typewriter: Ubuntu Mono - use \ttfamily or \texttt{}
\setmainfont[Ligatures=TeX,Scale=0.95]{Ubuntu}

% graphics path
\graphicspath{{resources/}}

% minted theme
\usemintedstyle{pastie} % monokai, add to minted options: bgcolor=bggray
% monokai: \renewcommand\theFancyVerbLine{\ttfamily\textcolor[rgb]{0.48,0.48,0.48}{\arabic{FancyVerbLine}}}
\renewcommand\theFancyVerbLine{\ttfamily\textcolor[rgb]{0,0,0}{\arabic{FancyVerbLine}}}

% color definitions
% monokai
% \definecolor{bggray}{cmyk}{0.03, 0.0, 0.15, 0.84}

% section/paragraph styling
\titleformat*{\section}{\bfseries\sffamily}
\titleformat*{\subsection}{\bfseries\sffamily}
\titleformat*{\subsubsection}{\bfseries\sffamily}
\titleformat*{\paragraph}{\bfseries\sffamily}
\titleformat*{\subparagraph}{\bfseries\sffamily}

% lists
\renewcommand\contentsname{Inhalt}
\renewcommand\listfigurename{Bilder}
\renewcommand\figurename{Bild}
\renewcommand\listoflistingscaption{Programmcodes}
\renewcommand\listingscaption{Programmcode}

\newcommand\ownit[1]{\textcolor[rgb]{0,0.28,1}{\textit{#1}}}

% line spacing
\setstretch{1.5}


% defining tab
\newcommand\tab[1][0.2in]{\hspace*{#1}}

% page borders
\AddToShipoutPictureBG{%
\begin{picture}(0,0)
\linethickness{2pt}
\put(\dimexpr0.79in-1pt,0.79in){\line(1,0){\dimexpr\paperwidth-0.79in-0.79in+1pt}}
\put(0.79in,\dimexpr0.79in-1pt){\line(0,1){\dimexpr\paperheight-0.79in-0.79in+1pt}}
\put(\dimexpr0.79in-1pt,\dimexpr\paperheight-0.79in){\line(1,0){\dimexpr\paperwidth-0.79in-0.79in+1pt}}
\put(\dimexpr\paperwidth-0.79in,\dimexpr0.79in-1pt){\line(0,1){\dimexpr\paperheight-0.79in-0.79in+2pt}}
\end{picture}%

}

% headers/footers
\renewcommand\footrulewidth{0pt}     % footer line width
\renewcommand\headrulewidth{0pt}     % header line width
\pagestyle{fancyplain}                 % headers/footers on all pages
\lhead{\sffamily{\textbf{Exploiting Seminar}}} % left header content
\chead{}
\rhead{\sffamily{\input{"|resources/dater.sh"}}}                                        % right header content
\lfoot{\sffamily{Credits: Prutheus $\rightarrow$ www.prutheus.com / mail@prutheus.com}} % left footer content
\cfoot{}
\rfoot{\sffamily{\thepage/\pageref{LastPage}}} % right footer content

%%%%%%%%%%%%%%%%%%%
% document start

\renewcommand\familydefault{\sfdefault}

\title{\textbf{Exploiting Seminar}}
\author{Prutheus}
\date{\input{"|resources/dater.sh"}}

\begin{document}

% title page

\maketitle

\vspace*{\fill}
\begin{flushright}
  \includegraphics[trim={0 0.5in 0 0}, scale = 1.0]{sign}

  \textcolor[rgb]{0.6,0.6,0.66}{\rule{1.5in}{0.8pt}}
\end{flushright}

\clearpage
% page 2
\tableofcontents
\listoffigures
\listoflistings

\clearpage

% page 3
\section{Zusammenfassung}
In dem \ownit{Exploiting Seminar} werden grundlegende Fähigkeiten im Bereich des \ownit{Exploiting} gelehrt. Dabei wird die Funktionsweise von Programmen auf Rechnern dargestellt, sowie der Eingriff in den Prozessablauf. Um dieses Vorhaben realisieren zu können, wird Assembler-Programmierung hinsichtlicht der Erstellung von \ownit{Shellcodes} präsentiert.

\section{Ziel}
Ziel des \ownit{Exploiting Seminars} ist die Vermittlung von Kernkompetenzen im Bereich des Prozessablaufes von Programmen sowie der zielgerichtete Eingriff in die Prozessfunktionalität.



% page 4
\section{Programmstart}
Bei einem \ownit{Programmstart} wird der Maschinencode eines Programms in den Arbeitsspeicher geladen und schrittweise abgearbeitet. Dabei gilt es folgende Bereiche eines Programms zu unterscheiden:

\subsection{Speichersektionen}
\subsubsection{section .data:\tab\ownit{Datenbereich}}

Im \ownit{Datenebreich} werden zum Start geladene Daten oder Konstanten deklariert. Dabei wird eine fixe Speicherregion reserviert, welche später nicht mehr expandiert werden kann. Während der Prozesslaufzeit können diese Daten nicht mehr geändert werden.

\subsubsection{section .bss:\tab\ownit{Variablenbereich}}
Im \ownit{Variablenbereich} werden Variablen deklariert. Das heißt es wird eine vordefinierte Speicherblockgröße für Daten, welche während der Prozesslaufzeit beschrieben und gelesen werden können, im Arbeitsspeicher reserviert. Diese Puffer-Speicherregion wird mit Nullen gefüllt.

\subsubsection{section .text:\tab\ownit{Programmbereich}}
Im \ownit{Programmbereich} wird der aktuelle Programmcode hinterlegt. Zu Beginn dieses Bereiches wird außerdem der Programmeinstiegspunkt für den Kernel festgelegt. Die Sektionsgröße wird fixiert, eine spätere Expansion ist nicht möglich.

\subsection{Speichersegmente}
Der Systemspeicher wird in sogenannte \ownit{Speichersegmente} aufgeteilt.

\subsection{Datensegment}
Das \ownit{Datensegment} setzt sich aus den .data und den .bss Sektionen zusammen.

\subsection{Codesegment}
Das \ownit{Codesegment} besteht aus der .text Sektion.

\subsection{Stack}
Der \ownit{Stack} beinhaltet Daten und Werte, welche im laufenden Programm zwischen Funktionsaufrufen ausgetauscht werden.

% page 5
\section{Stack}
Da der Stack eine wichtige Funktion beim \ownit{Shellcoding} und \ownit{Injecting} darstellt, wird dieser nun ausführlicher betrachtet.\newline
Der Stack belegt, wie bereits erwähnt, nur einen Teil des Speichers der für die Programmausführung reserviert wird. Hier eine schematische Darstellung des gesamten Speicherblocks:
\begin{figure}[h]
  \centering
  \includegraphics[trim={1.7in 1.7in 1.7in 1.7in}, clip, scale = 0.5]{memory_block}
  \caption{memory\_block.png}
\end{figure}
Wird der Stack nun genauer betrachtet, so stellt man fest, dass dieser nochmals unterteilt ist, in einzelne \ownit{Spei-cheradressen}. Dabei ist die maximale Anzahl an Bits, die in einer Adresse hinterlegt werden können, genauso groß, wie die Rechengröße des verbauten Prozessors. Da im \ownit{Exploiting Seminar} hauptsächlich \ownit{Shellcodes} für 32bit Prozessoren entwickelt werden, ist somit die Speichergröße einer Adresse auf 32bit, also 4 Bytes bzw. einem double word (\ownit{dword}) begrenzt. Hier eine Datstellung des Stacks:



% page 6
\begin{figure}[h]
  \centering
  \includegraphics[trim={1in 1in 1in 1in}, clip, scale = 0.5]{stack_block}
  \caption{stack\_block.png}
\end{figure}


Der Stack ist inkrementiert aufgebaut. D.h., dass er von der größten zur kleinsten Adresse \ownit{aufsteigt}. In der Illustration ist die Speicherplatzreservierung sowie die Operation mit Variablen gekennzeichnet. Um direkten Zugriff auf Variablen aus dem Stack zu haben, muss bevor die Variable in den Stack geschrieben wird, der \ownit{Stack Bottom Pointer (EBP)} auf die aktuelle Adresse des \ownit{Stack Pointers (ESP)} gesetzt werden. Anschließend wird ein beliebiger Wert per \ownit{push register} in den Stack verschoben. Dabei wird der Wert aus \ownit{register} an die Position \ownit{ESP} geschrieben und \ownit{ESP} wird um die Speichergröße von \ownit{register} dekrementiert.


Nachfolgend ist ein Assembler Code, der die Operationen mit dem Stack verdeutlicht, dargestellt. Dieser ist in NASM geschrieben und für 32bit Systeme.

\begin{minted}[
xleftmargin=0.4in,
linenos,
fontfamily=tt
]{nasm}
; test.asm
; TEST
; ---------
;
; nasm -f elf test.asm
; ld -m elf_i386 -s -o test test.o

section .data

section .bss

section .text
GLOBAL _start

_start:
  push ebp

  mov ebp, esp

  mov ecx, dword 01h
  push ecx

  mov eax, [ebp - 4]
  mov ebx, 01h

  mov esp, ebp
  pop ebp

  cmp ebx, eax
  je exit

  mov ebx, 1
  mov al, 1
  int 80h

 exit:
  xor ebx, ebx
  mov al, 1
  int 80h
\end{minted}
\captionof{listing}{test.asm}



%%%%%%%%%%%%%%%%%%%
% document end
\end{document}

The last two pages of output:

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.