Download as pdf or txt
Download as pdf or txt
You are on page 1of 55

Foundations of ARM64 Linux

Debugging, Disassembling, and


Reversing: Analyze Code, Understand
Stack Memory Usage, and Reconstruct
Original C/C++ Code with ARM64 1st
Edition Dmitry Vostokov
Visit to download the full and correct content document:
https://ebookmass.com/product/foundations-of-arm64-linux-debugging-disassembling
-and-reversing-analyze-code-understand-stack-memory-usage-and-reconstruct-origin
al-c-c-code-with-arm64-1st-edition-dmitry-vostokov/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Foundations of Linux Debugging, Disassembling, and


Reversing: Analyze Binary Code, Understand Stack Memory
Usage, and Reconstruct C/C++ Code with Intel x64 1st
Edition Dmitry Vostokov
https://ebookmass.com/product/foundations-of-linux-debugging-
disassembling-and-reversing-analyze-binary-code-understand-stack-
memory-usage-and-reconstruct-c-c-code-with-intel-x64-1st-edition-
dmitry-vostokov/

Foundations of ARM64 Linux Debugging, Disassembling,


and Reversing Dmitry Vostokov

https://ebookmass.com/product/foundations-of-arm64-linux-
debugging-disassembling-and-reversing-dmitry-vostokov/

Fundamentals of Trace and Log Analysis: A Pattern-


Oriented Approach to Monitoring, Diagnostics, and
Debugging 1st Edition Dmitry Vostokov

https://ebookmass.com/product/fundamentals-of-trace-and-log-
analysis-a-pattern-oriented-approach-to-monitoring-diagnostics-
and-debugging-1st-edition-dmitry-vostokov-2/

Fundamentals of Trace and Log Analysis A Pattern-


Oriented Approach to Monitoring, Diagnostics, and
Debugging 1st Edition Dmitry Vostokov

https://ebookmass.com/product/fundamentals-of-trace-and-log-
analysis-a-pattern-oriented-approach-to-monitoring-diagnostics-
and-debugging-1st-edition-dmitry-vostokov/
Python Debugging for AI, Machine Learning, and Cloud
Computing: A Pattern-Oriented Approach 1st Edition
Dmitry Vostokov

https://ebookmass.com/product/python-debugging-for-ai-machine-
learning-and-cloud-computing-a-pattern-oriented-approach-1st-
edition-dmitry-vostokov/

Visual Studio Code Distilled: Evolved Code Editing for


Windows, macOS, and Linux - Third Edition Alessandro
Del Sole

https://ebookmass.com/product/visual-studio-code-distilled-
evolved-code-editing-for-windows-macos-and-linux-third-edition-
alessandro-del-sole/

Visual Studio Code Distilled: Evolved Code Editing for


Windows, macOS, and Linux 3 / converted Edition
Alessandro Del Sole

https://ebookmass.com/product/visual-studio-code-distilled-
evolved-code-editing-for-windows-macos-and-linux-3-converted-
edition-alessandro-del-sole/

International Swimming Pool and Spa Code 2021 1st


Edition International Code Council

https://ebookmass.com/product/international-swimming-pool-and-
spa-code-2021-1st-edition-international-code-council/

International Fire Code (International Code Council


Series) 2021 1st Edition International Code Council

https://ebookmass.com/product/international-fire-code-
international-code-council-series-2021-1st-edition-international-
code-council/
Foundations of ARM64
Linux Debugging,
Disassembling, and
Reversing
Analyze Code, Understand Stack
Memory Usage, and Reconstruct
Original C/C++ Code with ARM64

Dmitry Vostokov
Foundations of
ARM64 Linux
Debugging,
Disassembling, and
Reversing
Analyze Code, Understand
Stack Memory Usage,
and Reconstruct Original C/C++
Code with ARM64

Dmitry Vostokov
Foundations of ARM64 Linux Debugging, Disassembling, and Reversing:
Analyze Code, Understand Stack Memory Usage, and Reconstruct Original
C/C++ Code with ARM64

Dmitry Vostokov
Dublin, Ireland

ISBN-13 (pbk): 978-1-4842-9081-1 ISBN-13 (electronic): 978-1-4842-9082-8


https://doi.org/10.1007/978-1-4842-9082-8
Copyright © 2023 by Dmitry Vostokov
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or
part of the material is concerned, specifically the rights of translation, reprinting, reuse of
illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way,
and transmission or information storage and retrieval, electronic adaptation, computer software,
or by similar or dissimilar methodology now known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark
symbol with every occurrence of a trademarked name, logo, or image we use the names, logos,
and images only in an editorial fashion and to the benefit of the trademark owner, with no
intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if
they are not identified as such, is not to be taken as an expression of opinion as to whether or not
they are subject to proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of
publication, neither the authors nor the editors nor the publisher can accept any legal
responsibility for any errors or omissions that may be made. The publisher makes no warranty,
express or implied, with respect to the material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Celestin Suresh John
Development Editor: James Markham
Coordinating Editor: Mark Powers
Cover designed by eStudioCalamar
Cover image by Susan Wilkinson on Unsplash (www.unsplash.com)
Distributed to the book trade worldwide by Apress Media, LLC, 1 New York Plaza, New York, NY
10004, U.S.A. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-sbm.com,
or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member
(owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance
Inc is a Delaware corporation.
For information on translations, please e-mail booktranslations@springernature.com; for
reprint, paperback, or audio rights, please e-mail bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook
versions and licenses are also available for most titles. For more information, reference our Print
and eBook Bulk Sales web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is
available to readers on GitHub (https://github.com/Apress). For more detailed information,
please visit http://www.apress.com/source-code.
Printed on acid-free paper
Table of Contents
About the Author���������������������������������������������������������������������������������ix

About the Technical Reviewer�������������������������������������������������������������xi

Preface����������������������������������������������������������������������������������������������xiii

Chapter 1: Memory, Registers, and Simple Arithmetic�������������������������1


Memory and Registers Inside an Idealized Computer������������������������������������������1
Memory and Registers Inside ARM 64-Bit Computer��������������������������������������������2
“Arithmetic” Project: Memory Layout and Registers��������������������������������������������3
“Arithmetic” Project: A Computer Program�����������������������������������������������������������5
“Arithmetic” Project: Assigning Numbers to Memory Locations���������������������������5
Assigning Numbers to Registers���������������������������������������������������������������������������8
“Arithmetic” Project: Adding Numbers to Memory Cells���������������������������������������9
Incrementing/Decrementing Numbers in Memory and Registers�����������������������12
Multiplying Numbers�������������������������������������������������������������������������������������������15
Summary������������������������������������������������������������������������������������������������������������18

Chapter 2: Code Optimization�������������������������������������������������������������19


“Arithmetic” Project: C/C++ Program�����������������������������������������������������������������19
Downloading GDB�����������������������������������������������������������������������������������������������20
GDB Disassembly Output – No Optimization�������������������������������������������������������21
GDB Disassembly Output – Optimization������������������������������������������������������������27
Summary������������������������������������������������������������������������������������������������������������28

iii
Table of Contents

Chapter 3: Number Representations��������������������������������������������������29


Numbers and Their Representations�������������������������������������������������������������������29
Decimal Representation (Base Ten)��������������������������������������������������������������������30
Ternary Representation (Base Three)������������������������������������������������������������������30
Binary Representation (Base Two)����������������������������������������������������������������������31
Hexadecimal Representation (Base Sixteen)������������������������������������������������������32
Why Are Hexadecimals Used?�����������������������������������������������������������������������������32
Summary������������������������������������������������������������������������������������������������������������34

Chapter 4: Pointers�����������������������������������������������������������������������������35
A Definition���������������������������������������������������������������������������������������������������������35
“Pointers” Project: Memory Layout and Registers����������������������������������������������36
“Pointers” Project: Calculations��������������������������������������������������������������������������38
Using Pointers to Assign Numbers to Memory Cells�������������������������������������������39
Adding Numbers Using Pointers�������������������������������������������������������������������������46
Incrementing Numbers Using Pointers���������������������������������������������������������������51
Multiplying Numbers Using Pointers�������������������������������������������������������������������54
Summary������������������������������������������������������������������������������������������������������������58

Chapter 5: Bytes, Halfwords, Words, and Doublewords����������������������59


Using Hexadecimal Numbers������������������������������������������������������������������������������59
Byte Granularity��������������������������������������������������������������������������������������������������60
Bit Granularity�����������������������������������������������������������������������������������������������������60
Memory Layout���������������������������������������������������������������������������������������������������61
Summary������������������������������������������������������������������������������������������������������������64

iv
Table of Contents

Chapter 6: Pointers to Memory�����������������������������������������������������������65


Pointers Revisited�����������������������������������������������������������������������������������������������65
Addressing Types������������������������������������������������������������������������������������������������65
Registers Revisited���������������������������������������������������������������������������������������������70
NULL Pointers�����������������������������������������������������������������������������������������������������70
Invalid Pointers���������������������������������������������������������������������������������������������������70
Variables As Pointers������������������������������������������������������������������������������������������71
Pointer Initialization��������������������������������������������������������������������������������������������71
Initialized and Uninitialized Data�������������������������������������������������������������������������72
More Pseudo Notation�����������������������������������������������������������������������������������������72
“MemoryPointers” Project: Memory Layout�������������������������������������������������������73
Summary������������������������������������������������������������������������������������������������������������87

Chapter 7: Logical Instructions and PC����������������������������������������������89


Instruction Format����������������������������������������������������������������������������������������������89
Logical Shift Instructions������������������������������������������������������������������������������������90
Logical Operations����������������������������������������������������������������������������������������������90
Zeroing Memory or Registers�����������������������������������������������������������������������������91
Program Counter�������������������������������������������������������������������������������������������������92
Code Section�������������������������������������������������������������������������������������������������������93
Summary������������������������������������������������������������������������������������������������������������94

Chapter 8: Reconstructing a Program with Pointers��������������������������95


Example of Disassembly Output: No Optimization����������������������������������������������95
Reconstructing C/C++ Code: Part 1��������������������������������������������������������������������98
Reconstructing C/C++ Code: Part 2������������������������������������������������������������������100
Reconstructing C/C++ Code: Part 3������������������������������������������������������������������102

v
Table of Contents

Reconstructing C/C++ Code: C/C++ Program��������������������������������������������������103


Example of Disassembly Output: Optimized Program���������������������������������������104
Summary����������������������������������������������������������������������������������������������������������106

Chapter 9: Memory and Stacks��������������������������������������������������������107


Stack: A Definition���������������������������������������������������������������������������������������������107
Stack Implementation in Memory���������������������������������������������������������������������108
Things to Remember�����������������������������������������������������������������������������������������110
Stack Push Implementation������������������������������������������������������������������������������111
Stack Pop Implementation��������������������������������������������������������������������������������111
Register Review������������������������������������������������������������������������������������������������111
Application Memory Simplified�������������������������������������������������������������������������112
Stack Overflow��������������������������������������������������������������������������������������������������113
Jumps���������������������������������������������������������������������������������������������������������������114
Calls������������������������������������������������������������������������������������������������������������������115
Call Stack����������������������������������������������������������������������������������������������������������116
Exploring Stack in GDB�������������������������������������������������������������������������������������118
Summary����������������������������������������������������������������������������������������������������������121

Chapter 10: Frame Pointer and Local Variables�������������������������������123


Stack Usage������������������������������������������������������������������������������������������������������123
Register Review������������������������������������������������������������������������������������������������124
Addressing Array Elements�������������������������������������������������������������������������������124
Stack Structure (No Function Parameters)�������������������������������������������������������126
Function Prolog�������������������������������������������������������������������������������������������������127
Raw Stack (No Local Variables and Function Parameters)�������������������������������127
Function Epilog�������������������������������������������������������������������������������������������������129

vi
Table of Contents

“Local Variables” Project����������������������������������������������������������������������������������130


Disassembly of Optimized Executable��������������������������������������������������������������133
Summary����������������������������������������������������������������������������������������������������������134

Chapter 11: Function Parameters�����������������������������������������������������135


“FunctionParameters” Project��������������������������������������������������������������������������135
Stack Structure�������������������������������������������������������������������������������������������������136
Function Prolog and Epilog�������������������������������������������������������������������������������138
Project Disassembled Code with Comments����������������������������������������������������139
Parameter Mismatch Problem��������������������������������������������������������������������������144
Summary����������������������������������������������������������������������������������������������������������145

Chapter 12: More Instructions����������������������������������������������������������147


PSTATE Flags�����������������������������������������������������������������������������������������������������147
Testing for 0������������������������������������������������������������������������������������������������������147
TST – Logical Compare�������������������������������������������������������������������������������������148
CMP – Compare Two Operands�������������������������������������������������������������������������149
TST or CMP?�����������������������������������������������������������������������������������������������������150
Conditional Jumps��������������������������������������������������������������������������������������������150
Function Return Value���������������������������������������������������������������������������������������151
Summary����������������������������������������������������������������������������������������������������������152

Chapter 13: Function Pointer Parameters����������������������������������������153


“FunctionPointerParameters” Project���������������������������������������������������������������153
Commented Disassembly���������������������������������������������������������������������������������154
Summary����������������������������������������������������������������������������������������������������������161

vii
Table of Contents

Chapter 14: Summary of Code Disassembly Patterns����������������������163


Function Prolog/Epilog��������������������������������������������������������������������������������������163
ADR (Address)���������������������������������������������������������������������������������������������������164
Passing Parameters������������������������������������������������������������������������������������������164
Accessing Saved Parameters and Local Variables��������������������������������������������165
Summary����������������������������������������������������������������������������������������������������������166

Index�������������������������������������������������������������������������������������������������167

viii
About the Author
Dmitry Vostokov is an internationally
recognized expert, speaker, educator, scientist,
and author. He is the founder of the pattern-
oriented software diagnostics, forensics,
and prognostics discipline and Software
Diagnostics Institute (DA+TA: DumpAnalysis.
org + TraceAnalysis.org). Vostokov has also
authored more than 50 books on software
diagnostics, anomaly detection and analysis,
software and memory forensics, root cause analysis and problem solving,
memory dump analysis, debugging, software trace and log analysis,
reverse engineering, and malware analysis. He has more than 25 years
of experience in software architecture, design, development, and
maintenance in various industries, including leadership, technical, and
people management roles. Dmitry also founded Syndromatix, Anolog.
io, BriteTrace, DiaThings, Logtellect, OpenTask Iterative and Incremental
Publishing (OpenTask.com), Software Diagnostics Technology and
Services (former Memory Dump Analysis Services; PatternDiagnostics.
com), and Software Prognostics. In his spare time, he presents various
topics on Debugging TV and explores Software Narratology, its further
development as Narratology of Things and Diagnostics of Things (DoT),
Software Pathology, and Quantum Software Diagnostics. His current
areas of interest are theoretical software diagnostics and its mathematical
and computer science foundations, application of formal logic, artificial
intelligence, machine learning and data mining to diagnostics and anomaly
detection, software diagnostics engineering and diagnostics-driven

ix
About the Author

development, and diagnostics workflow and interaction. Recent areas


of interest also include cloud native computing, security, automation,
functional programming, and applications of category theory to software
development and big data.

x
About the Technical Reviewer
Sundar Pandian has more than three
years of experience in embedded software
development, including development of device
drivers, middleware software, and application
services for the infotainment system on the
Android platform. He’s also developed CAN
protocol drivers for the automotive braking
system on the Autosar platform.
He’s developed software with C, C++,
and Java and worked in the automotive,
semiconductor, and telecom industries. He has
a bachelor’s in electronics and communication engineering. Currently, he
serves as a firmware/middleware engineer for audio DSPs.

xi
Preface
The book covers topics ranging from ARM64 assembly language
instructions and writing programs in assembly language to pointers, live
debugging, and static binary analysis of compiled C and C++ code.
Diagnostics of core memory dumps, live and postmortem debugging
of Linux applications, services, and systems, memory forensics, malware,
and vulnerability analysis require an understanding of ARM64 assembly
language and how C and C++ compilers generate code, including
memory layout and pointers. This book is about background knowledge
and practical foundations that are needed to understand internal Linux
program structure and behavior, start working with the GDB debugger, and
use it for disassembly and reversing. It consists of practical step-by-step
exercises of increasing complexity with explanations and many diagrams,
including some necessary background topics.
By the end of the book, you will have a solid understanding of how
Linux C and C++ compilers generate binary code. In addition, you will be
able to analyze such code confidently, understand stack memory usage,
and reconstruct original C/C++ code.
The book will be useful for

• Software support and escalation engineers, cloud


security engineers, SRE, and DevSecOps

• Software engineers coming from JVM background

• Software testers

• Engineers coming from non-Linux environments, for


example, Windows or Mac OS X

xiii
Preface

• Engineers coming from non-ARM environments, for


example, x86/x64

• Linux C/C++ software engineers without assembly


language background

• Security researchers without assembly language


background

• Beginners learning Linux software reverse engineering


techniques

This book can also be used as an ARM64 assembly language and Linux
debugging supplement for relevant undergraduate-level courses.

Source Code
All source code used in this book can be downloaded from ­github.com/
apress/arm64-linux-debugging-disassembling-reversing.

xiv
CHAPTER 1

Memory, Registers,
and Simple Arithmetic
 emory and Registers Inside an
M
Idealized Computer
Computer memory consists of a sequence of memory cells, and each cell
has a unique address (location). Every cell contains a “number.” We refer
to these “numbers” as contents at addresses (locations). Because memory
access is slower than arithmetic instructions, there are so-called registers
to speed up complex operations that require memory to store temporary
results. We can also think about them as stand-alone memory cells. The
name of a register is its address. Figure 1-1 illustrates this.

© Dmitry Vostokov 2023 1


D. Vostokov, Foundations of ARM64 Linux Debugging, Disassembling, and Reversing,
https://doi.org/10.1007/978-1-4842-9082-8_1
Chapter 1 Memory, Registers, and Simple Arithmetic

Figure 1-1. Computer memory represented as a sequence of memory


cells and locations

 emory and Registers Inside ARM


M
64-Bit Computer
Here, addresses for memory locations containing integer values usually
differ by four or eight, and we also show two registers called X0 and X1.
The first halves of them are called W0 and W1 as shown in Figure 1-2.

2
Chapter 1 Memory, Registers, and Simple Arithmetic

Figure 1-2. Typical ARM 64-bit memory and register layout

Because memory cells contain “numbers,” we start with simple


arithmetic and ask a processor to compute the sum of two numbers to see
how memory and registers change their values.

“ Arithmetic” Project: Memory Layout


and Registers
For our project, we have two memory addresses (locations) that we call
“a” and “b.” We can think about “a” and “b” as names of their respective
addresses (locations). Now we introduce a special notation where (a)

3
Chapter 1 Memory, Registers, and Simple Arithmetic

means contents at the memory address (location) “a.” If we use the C


or C++ language to write our project, we declare and define memory
locations “a” and “b” as

static int a, b;

By default, when we load a program, static memory locations are filled


with zeroes, and we can depict our initial memory layout after loading the
program, as shown in Figure 1-3.

Figure 1-3. Initial memory layout after loading the program

4
Chapter 1 Memory, Registers, and Simple Arithmetic

“Arithmetic” Project: A Computer Program


We can think of a computer program as a sequence of instructions for
the manipulation of contents of memory cells and registers. For example,
addition operation: add the contents of memory cell №12 to the contents
of memory cell №14. In our pseudo-code, we can write

[14] <- [14] + [12]

Our first program in pseudo-code is shown on the left of the table:

[a] <- 1 Here, we put assembly instructions corresponding to


[b] <- 1 pseudo-code.
[b] <- [b] + [a]
[a] <- [a] + 1
[b] <- [b] * [a]

“<-” means moving (assigning) the new value to the contents of a


memory location (address). “//” is a comment sign, and the rest of the line
is a comment. “=” shows the current value at a memory location (address).
To remind, a code written in a high-level programming language is
translated to a machine language by a compiler. However, the machine
language can be readable if its digital codes are represented in some
mnemonic system called assembly language. For example, ADD X1, X1, #1
is increment by one of what is stored in the register memory cell X1.

“ Arithmetic” Project: Assigning Numbers


to Memory Locations
We remind that “a” means the location (address) of the memory cell,
and it is also the name of the location (address) 00000000004b2b00 (see
Figure 1-3). [a] means the contents (number) stored at the address “a.”

5
Chapter 1 Memory, Registers, and Simple Arithmetic

If we use the C or C++ language, “a” is called “the variable a,” and we
write the assignment as

a = 1;

In ARM64 assembly language, we write several instructions for that:

adr x0, a
mov w1, #1
str w1, [x0]

In the GDB disassembly output, we may see the following code:

adrp    x0, 0x4b2000
add     x0, x0, #0xb00
mov     w1, #0x1
str     w1, [x0]

We show the translation of our pseudo-code into assembly language in


the right column:

[a] <- 1          // x0 = a adr  x0, a


// w1 = 1 mov  w1, #1
// [a] = 1 str  w1, [x0]
[b] <- 1          // x0 = b adr  x0, b
// w1 = 1 mov  w1, #1
// [b] = 1 str  w1, [x0]
[b] <- [b] + [a]
[a] <- [a] + 1
[b] <- [b] * [a]

adrp x0, 0x4b2000, and subsequent add x0, x0, #0xb00 is how the
compiler generates code to calculate the address “a” instead of specifying it
directly. Such code is required for addressing large regions of memory, and

6
Chapter 1 Memory, Registers, and Simple Arithmetic

the compiler uses it even for smaller regions where just one adr instruction
is sufficient.
Literal constants have the # prefix, for example, #0x1. The 0x prefix
means the following number is hexadecimal. We explain such numbers
in Chapter 3. Please also notice that the movement direction is the same
in both the disassembly output and the pseudo-code: from right to left
(except for the str instruction).
After executing the first three assembly language instructions, we have
the memory layout shown in Figure 1-4A.

Figure 1-4A. Memory layout after executing the first three assembly
language instructions

7
Chapter 1 Memory, Registers, and Simple Arithmetic

After executing the next three assembly language instructions, we have


the memory layout shown in Figure 1-4B.

Figure 1-4B. Memory layout after executing the next three assembly
language instructions

Assigning Numbers to Registers


In the previous section, we saw that assigning numbers was a part of
memory assignments. We can write in pseudo-code:

register <- 1
register <- [a]

8
Chapter 1 Memory, Registers, and Simple Arithmetic

Note that we do not use brackets when we refer to register contents.


The latter instruction means assigning (copying) the number at the
location (address) “a” to a register.
In assembly language, we write

mov  w1, #1              // 1 is copied to the first half of X1


register
mov  x1, #1              // full contents of X1 register are
replaced with 1
adr  x0, a               // copy the location (address) "a" to
X0 register
ldr  w1, [x0]            // copy the number at the location
stored in X0 to
                         // the first half of X1 register
Ldr  x1, [x0]            // copy the number at the location
stored in X0 to X1

In the GDB disassembly output, we may see the output where one
adr instruction is replaced by adrp/add instructions with parts of the
address value:

adrp x0, 0x4b2000        // 0x4b2000 + 0xb00 = 0x4b2b00


("a" address)
add  x0, x0, #0xb00
ldr  w1, [x0]

“ Arithmetic” Project: Adding Numbers


to Memory Cells
Now let's look at the following pseudo-code statement in more detail:

[b] <- [b] + [a]

9
Chapter 1 Memory, Registers, and Simple Arithmetic

To recall, “a” and “b” mean the names of locations (addresses)


00000000004b2b00 and 00000000004b2b04, respectively (see Figures 1-4A
and 1-4B). [a] and [b] mean contents at addresses “a” and “b,” respectively,
simply some numbers stored there.
In the C or C++ language, we write the following statement:

b = b + a;
b += a;

In assembly language, we use the instruction ADD. Because of ARM


architecture limitations, we cannot use memory addresses in one step
(instruction), for example, add b, b, a. We can only use the add register1,
register1, register0 instruction to add the value stored in the register0 to
the value stored in the register1 and move the result to the register1. So,
first, we need to load (ldr) contents at addresses “a” and “b” to registers
and store (str) the result back to the memory location “b” after addition.
Recall that a register is like a temporary memory cell itself here:

Register2 <- [b]


Register1 <- [a]
Register2 <- register2 + register1
[b] <- register2

In assembly language, we write

adr  x0, b
ldr  w1, [x0]
adr  x0, a
ldr  w0, [x0]
add  w1, w1, w0
adr  x0, b
str  w1, [x0]

In the GDB disassembly output, we may see the following code:

10
Chapter 1 Memory, Registers, and Simple Arithmetic

adrp x0, 0x4b2000


add  x0, x0, #0xb00
ldr  w1, [x0]
adrp x0, 0x4b2000
add  x0, x0, #0xb04
ldr  w0, [x0]
add  w1, w1, w0
adrp x0, 0x4b2000
add  x0, x0, #0xb04
str  w1, [x0]

Now we can translate our pseudo-code into assembly language:

[a] <- 1          // x0 = a adr  x0, a


// w1 = 1 mov  w1, #1
// [a] = 1 str  w1, [x0]
[b] <- 1          // x0 = b adr  x0, b
// w1 = 1 mov  w1, #1
// [b] = 1 str  w1, [x0]
[b] <- [b] + [a]  // x0 = b adr  x0, b
// w1 = 1 ldr  w1, [x0]
// x0 = a adr  x0, a
// w0 = 1 ldr  w0, [x0]
// w1 = 2 add  w1, w1, w0
// x0 = b adr  x0, b
// [b] = 2 str  w1, [x0]
[a] <- [a] + 1
[b] <- [b] * [a]

After executing ADR, LDR, ADD, and STR instructions, we have the
memory layout illustrated in Figure 1-5.

11
Chapter 1 Memory, Registers, and Simple Arithmetic

Figure 1-5. Memory layout after executing ADR, LDR, ADD, and STR
instructions

Incrementing/Decrementing Numbers
in Memory and Registers
In pseudo-code, it looks simple and means increment (decrement) a
number stored at the location (address) “a”:

[a] <- [a] + 1


[a] <- [a] – 1

In the C or C++ language, we can write this using three possible ways:

12
Chapter 1 Memory, Registers, and Simple Arithmetic

a = a + 1;
++a;
a++;
b = b – 1;
--b;
b--;

In assembly language, we use instructions ADD and SUB and write

add  x0, x0, #1
sub  x0, x0, #1

adr  x0, a
ldr  w1, [x0]
add  w1, w1, #1
str  w1, [x0]

adr  x0, b
ldr  w1, [x0]
sub  w1, w1, #1
str  w1, [x0]

In the GDB disassembly output, we may see the similar instructions:

adrp x0, 0x4b2000


add  x0, x0, #0xb00
ldr  w0, [x0]
add  w1, w0, #0x1
adrp x0, 0x4b2000
add  x0, x0, #0xb00
str  w1, [x0]

13
Chapter 1 Memory, Registers, and Simple Arithmetic

Now we add the assembly language translation of increment:

[a] <- 1          // x0 = a adr  x0, a


                  // w1 = 1 mov  w1, #1
                  // [a] = 1 str  w1, [x0]
[b] <- 1          // x0 = b adr  x0, b
                  // w1 = 1 mov  w1, #1
                  // [b] = 1 str  w1, [x0]
[b] <- [b] + [a]  // x0 = b adr  x0, b
                  // w1 = 1 ldr  w1, [x0]
                  // x0 = a adr  x0, a
                  // w0 = 1 ldr  w0, [x0]
                  // w1 = 2 add  w1, w1, w0
                  // x0 = b adr  x0, b
                  // [b] = 2 str  w1, [x0]
[a] <- [a] + 1    // x0 = a adr  x0, a
                  // w1 = 1 ldr  w1, [x0]
                  // w1 = 2 add  w1, w1, #1
                  // [a] = 2 str  w1, [x0]
[b] <- [b] * [a]

After the execution of the ADD instruction, we have the memory layout
illustrated in Figure 1-6.

14
Chapter 1 Memory, Registers, and Simple Arithmetic

Figure 1-6. Memory layout after the execution of the ADD instruction

Multiplying Numbers
In pseudo-code, we write

[b] <- [b] * [a]

It means that we multiply the number at the location (address) “b” by


the number at the location (address) “a.”
In the C or C++ language, we can write that using two ways:

b =  b * a;
b *= a;

15
Chapter 1 Memory, Registers, and Simple Arithmetic

In assembly language, we use instruction MUL and write

adr  x0, b
ldr  w1, [x0]
adr  x0, a
ldr  w0, [x0]
mul  w1, w1, w0
adr  x0, b
str  w1, [x0]

In the GDB disassembly output, we may see the following code:

adrp x0, 0x4b2000


add  x0, x0, #0xb04
ldr  w1, [x0]
adrp x0, 0x4b2000
add  x0, x0, #0xb00
ldr  w0, [x0]
mul  w1, w1, w0
adrp x0, 0x4b2000
add  x0, x0, #0xb04
str  w1, [x0]

Now we add additional assembly instructions to our pseudo-code


assembly language translation:

16
Another random document with
no related content on Scribd:
afterlos. Zwischen Darm und Leibesschlauch liegen die
Fortpflanzungsorgane, welche einen zwitterartigen Charakter tragen.
Die Begattung ist dieser Einrichtung gemäss stets eine
wechselseitige. In manchen Gattungen (Microstoma, Stenostoma)
kommt aber neben der geschlechtlichen auch eine
ungeschlechtliche Vermehrung vor und letztere bildet mehrfach
sogar die Regel. Das zierliche M e e r l i n s e n k e t t c h e n (Catenula
lemnae) z. B. pflanzt sich ganz ausschliesslich auf diese Weise fort.
Zum besseren Verständnis des G e s c h l e c h t s a p p a r a t e s der
Rhabdocölen diene die untenstehende Abbildung (Fig. 49), in
welcher die hauptsächlich in Betracht kommenden Teile desselben
schematisch dargestellt sind.
Die zentral liegende Geschlechtsöffnung (pg) führt zunächst in
das Atrium genitale (a), einen erweiterungsfähigen Hohlraum, der
jederseits den Ausführungsgang des K e i m - und D o t t e r s t o c k e s (ks
und ds) aufnimmt, während sich an seinem oberen (resp. vorderen)
Ende das männliche Zeugungsorgan (p) inseriert, welches mit den
beiden H o d e n (h) in Verbindung steht. Die reife Keimzelle gelangt
nach ihrer Ablösung vom Keimstocke in jenes Atrium und nimmt hier
eine entsprechende Portion Dottermasse in sich auf. Dann erfolgt
die Befruchtung durch ein anderes hermaphroditisches Individuum
der nämlichen Spezies, welches seinen Penis (p) durch den Porus
genitalis bei pg einführt. Die Umhüllung des nunmehr
entwickelungsfähig gewordenen Eies mit einer schützenden
Chitinschale — zu welcher das Material von besonderen Drüsen
oder vom Zellenbelag der Atriumwand geliefert wird — bildet den
Schluss zu diesen Vorgängen.
Die geschilderten Verhältnisse finden wir indessen nur bei den
höchstorganisierten Rhabdocöliden-Familien (bei Mesostomiden,
Vorticiden u. s. w.), während z. B. die einfacher gebauten
Macrostomiden (Fig. 52 S. 256) der gesonderten Dotterstöcke
ermangeln und lediglich O v a r i e n besitzen. An letzteren zeigt aber
der untere Abschnitt die merkwürdige Eigenschaft, Dotterkörnchen
produzieren zu können, sodass die heranreifenden Keimzellen jenes
Sekret aus ihrer unmittelbaren Umgebung zu beziehen und sich auf
Kosten desselben zu vergrössern im stande sind.
Zwischen diesem primitiven Verhalten und
dem Geschlechtsapparate mit vollständig
getrennten Keim- und Dotterstöcken
vermittelt der bei Prorhynchus stagnalis
vorliegende Fall, wo sich die einheitliche
Eierstocksdrüse in zwei verschieden
funktionierende Abschnitte differenziert hat,
von denen der eine bloss Keimzellen, der
andere nur Dotterflüssigkeit sezerniert. Durch
räumliche Sonderung jener beiden
Drüsenhälften, also durch eine allmählich
eingetretene Arbeitsteilung zwischen
denselben, haben wir uns die zuerst
Fig. 49. beschriebene und in Fig. 49 dargestellte
Schema des Einrichtung hervorgegangen zu denken.
Geschlechtsapparates. Bei der Mehrzahl der Rhabdocöliden
besteht eine Duplizität der weiblichen
Geschlechtsdrüsen; doch giebt es auch einige Gattungen (Vortex,
Mesostoma, Gyrator), bei denen sie nur in einfacher Anzahl
erscheinen. Eine Reduktion der männlichen Drüsen ist seltener zu
konstatieren, doch kommt sie gleichfalls bei Gyrator und noch
einigen anderen Gattungen vor.
Zur genaueren Orientierung über den Bau der Turbellarien ist es
erforderlich, dass wir nach Betrachtung der Generationsorgane nun
auch den ungegliederten, weichen Körper und den
Verdauungsapparat derselben einer näheren Analyse unterziehen.
Ersterer besteht, wenn wir bei unserer Untersuchung von innen nach
aussen gehen, aus einem mächtig entwickelten
H a u t m u s k e l s c h l a u c h e , dessen Zusammensetzung aus Längs- und
Querfasern, welche parallel und unmittelbar an einander liegen,
schon den älteren Forschern bekannt war. Jene Fasern besitzen bei
0.0005 bis 0.002 mm Breite eine oft sehr bedeutende Länge;
wenigstens lassen sich an Zupfpräparaten nicht selten Fragmente
von 0.5 bis 0.9 mm isolieren. Ihrer sonstigen Beschaffenheit nach
sind sie homogen, stark lichtbrechend, glatt und kernlos. Je nach
den einzelnen Arten und Gattungen weist der Hautmuskelschlauch
eine verschiedene Anordnung seiner Elemente auf. Bei manchen
Spezies liegen die Längsfasern zu innerst und werden von einer
äusseren Ringfaserschicht umgeben. Dies ist z. B. der Fall bei
Mesostoma Ehrenbergii. Bei einer nahe verwandten Art (Mesostoma
lingua) befindet sich zwischen beiden Schichten noch eine solche
aus Diagonalfasern, und bei Microstoma lineare ist die
Zusammensetzung des Muskelnetzes gerade umgekehrt, nämlich
so, dass die Längsfasern die äussere, die Ringfasern die innere
Schicht bilden. Auf diesen (seiner Gestalt nach sehr
veränderungsfähigen) Muskelschlauch folgt die sogenannte
B a s a l m e m b r a n , ein gallertartiges Häutchen von feinkörniger
Struktur, welches dem Turbellarienkörper Festigkeit verleiht und
zugleich dem darüber liegenden E p i t h e l zur Unterlage dient.
Letzteres besteht aus einer einfachen Zellenlage, deren einzelne
Elemente durch eine Kittsubstanz mit einander verbunden sind.
Zwischen ganz flachen Epithelzellen und hohen cylindrischen
existieren bei den verschiedenen Spezies alle möglichen
Übergänge. Jede solche Zelle besitzt, je nach ihrer Gestalt, einen
scheiben- oder spindelförmigen Kern und mehrere feine
Protoplasmafortsätze (Cilien), die in ihrer Gesamtheit das
charakteristische Wimperkleid darstellen, womit die
Körperoberfläche aller Strudelwürmer bedeckt ist. Bei manchen
Spezies lässt sich über dem Epithel noch eine äusserst feine
K u t i k u l a nachweisen, welche mit zahllosen winzigen Öffnungen für
den Durchtritt der Cilien versehen ist. Mit Hilfe einer einprozentigen
Höllensteinlösung habe ich dieses äusserst zarte Gebilde an
frischen Exemplaren von Macrostoma viride, Microstoma lineare und
Stenostoma leucops deutlich sichtbar gemacht. Man lässt zu diesem
Zwecke einen einzigen Tropfen jener Flüssigkeit unter das Deckglas
laufen und kann dann unterm Mikroskop wahrnehmen, wie sich
jenes glashelle, doppelt contourierte Häutchen auf einzelnen
Strecken oder auch im ganzen Umkreise des Wurmes binnen
wenigen Minuten abhebt. Bei der zuletzt genannten Art geschieht die
Loslösung so schnell, dass zur Herstellung des betreffenden
Präparates oft nur einige Sekunden erforderlich sind.
Ausser den Cilien kommen bei gewissen Gattungen von
Rhabdocöliden auch noch längere, borstenähnliche
E p i t h e l f o r t s ä t z e vor, die vielfach zitternde oder schwingende
Bewegungen ausführen. Bei Macrostoma viride (Fig. 52) sind diese
„Geisselhaare“ über den ganzen Körper verbreitet; die längsten
stehen aber am vorderen und hinteren Ende des Tierchens. Das
Gleiche sehen wir bei Macrostoma hystrix und anderen Vertretern
desselben Genus. Auch bei der von E . S e k e r a neuerdings
beschriebenen Bothrioplana alacris[92] finden wir (am vorderen
Saume des Kopfes) starre Borsten, die — wie es den Anschein hat
— zur Vermittelung von Tastempfindungen dienen.
Als eigentümliche Einlagerungen treten in der Haut bei fast allen
Strudelwürmern des Süsswassers ausserordentlich winzige
S t ä b c h e n (R h a b d i t e n ) auf, welche — zu kleinen Paketen oder
Bündeln vereinigt — sich über die gesamte Leibesoberfläche
verteilen. Ihre Entstehung nehmen diese bald nadel-, bald
keulenförmigen Gebilde in besonderen Zellen, die dem zwischen
Darm und Hautmuskelschlauch sich ausspannenden Bindegewebe,
welches als P a r e n c h y m bezeichnet wird, angehören. Von hier aus
rücken die Stäbchen auf eine noch nicht hinlänglich festgestellte
Weise bis zum Epithel vor und dringen in die Zellen desselben ein,
wo sie dauernd verbleiben. Bei manchen Rhabdocöliden ist auch
das Parenchym selbst mit zahlreichen Rhabditen durchsetzt, und sie
bilden dann im Innern desselben ganze Reihen oder Strassen, die
gewöhnlich im Vorderende der betreffenden Tiere zusammenlaufen.
Das sieht man deutlich bei mehreren Mesostomiden, z. B. bei M.
rostratum und M. viridatum.
Eine mikroskopische Analyse des P a r e n c h y m s ergiebt, dass
dasselbe aus Muskelfasern, Bindegewebssträngen und mehrfach
verästelten Zellen besteht, die gleichfalls bindegewebiger Natur sind.
Erst durch die Methode der Schnittserien war es möglich, die
einzelnen Bestandteile des Parenchyms festzustellen und ein
Lückensystem innerhalb desselben nachzuweisen, welches von
einer farblosen, blutartigen Flüssigkeit erfüllt ist. Diese besitzt aber
keine selbständige Zirkulation, sondern wird lediglich durch die
Kontraktionen des Hautmuskelschlauchs gelegentlich in Bewegung
versetzt.
Sehr häufig sind die Fasern des Parenchymgewebes mit
P i g m e n t k ö r n c h e n durchsetzt, und es kommt dann das zu stande,
was v. G r a f f [93] sehr passend „reticuläre Pigmentierung“ genannt
hat. Hiervon rührt die dunklere Färbung der Rückenfläche bei
manchen Rhabdocölen her, die niemals in den epithelialen Zellen
ihren Sitz hat — obwohl dies bei flüchtiger Ansicht so scheinen
könnte.
Im Parenchym ist auch das G e h i r n g a n g l i o n der Turbellarien
gelegen oder, richtiger gesagt, es ist in dieses Gewebe meistenteils
vollständig eingebettet. Seinem feineren Baue nach besteht
dasselbe aus einer Anhäufung von feinkörniger oder zartfaseriger
Substanz und einer Rinde von Ganglienzellen mit runden oder auch
ovalen Kernen. Zwei Längsnervenstämme, die vom Gehirn abgehen
und zu beiden Körperseiten verlaufen, sind bei zahlreichen
Rhabdocölen nachgewiesen; bei einigen Spezies hat man auch
mehrfache Kommissuren, welche die Hauptstämme mit einander
verbinden, vorgefunden.
Hinsichtlich des Parenchyms ist noch zu bemerken, dass es bei
den verschiedenen Gattungen in mehr oder minder starker
Entwickelung angetroffen wird. Wir kennen Formen, deren
Leibeshöhlung so gut wie frei von parenchymatösen Muskeln und
Bindegewebsbalken ist, während andere wieder das gerade
Gegenteil solchen Verhaltens darbieten.
Was nun schliesslich den Ve r d a u u n g s a p p a r a t der Rhabdocölen
anlangt, so besteht derselbe aus Schlund (Pharynx) und Darm.
Letzterer ist nach dem Parenchym zu entweder durch eine
bindegewebige Scheide abgegrenzt, oder er besitzt eine
Muskelausstattung, an welcher wir — wie beim Hautschlauche —
Längs- und Ringfasern unterscheiden können. Das Darmlumen ist
mit einem kontinuierlichen Epithelbelag ausgestattet, dessen Zellen
membranlos sind, und die an ihrer Basis rundliche, resp. ovale
Kerne besitzen. Gewöhnlich ist dieses Epithel an der unteren
(ventralen) Seite des Darmes etwas höher als an der oberen. Die
einzelnen Zellen desselben erscheinen häufig an ihrem freien Ende
keulig verdickt und mit zahlreichen Fetttröpfchen erfüllt. Was die
Verdauung und Assimilation der in den Darm aufgenommenen
Nahrungsobjekte anlangt, so scheinen die grösseren Epithelzellen
kleine organische Partikelchen direkt in sich aufnehmen zu können,
indem sie dieselben nach Art der Rhizopoden (vergl. Kapitel 4) mit
ihrem Protoplasmaleibe umfliessen. Es fände demnach in diesem
Falle eine sogenannte „intracelluläre Verdauung“ statt. Diese Ansicht
wird durch darauf bezügliche Experimente von I s a o I j i m a (jetzt
Professor an der Universität Tokio) zu fast vollkommener Gewissheit
erhoben. Dr. Ijima fütterte Planarien mit dem Dotter von Hühnereiern
und fand bald darauf die gefressenen Dotterkugeln überall in den
Zellen der Darmverzweigungen seiner Versuchs-Dendrocölen
wieder. Auch entdeckte derselbe Forscher, dass der Darmkanal bei
Dendrocoelum lacteum, welcher so deutlich durch die Haut sichtbar
ist, seine schwärzliche Beschaffenheit von kleinen Schlammteilchen
erhält, welche eingeschlürft und in die Epithelzellen mit
aufgenommen worden sind[94]. Was in diesem Bezug für die
Planarien experimentell erwiesen ist, darf ohne Zweifel auch für die
Rhabdocöliden als gültig angesehen werden, zumal K r u k e n b e r g
auch an mehreren Zoophyten die Aufnahme von Fremdkörpern
durch die Entodermzellen konstatiert hat.
Zum Ergreifen oder Einschlürfen der Nahrung besitzen alle
Turbellarien ein dickmuskulöses, kompliziert gebautes Organ, den
Schlund (Pharynx), welcher entweder die Gestalt eines
starkwandigen Rohres oder diejenige eines zwiebelartigen Bulbus
hat. Die übergrosse Mehrzahl der Rhabdocölen ist mit einem
Pharynx bulbosus ausgestattet, der bei den Mesostomiden eine
plattgedrückte kugelige Form zeigt und sich, von oben her gesehen,
wie eine Rosette ausnimmt. Das ist der sogenannte Pharynx
rosulatus. Seine Achse steht stets senkrecht auf der Längsachse
des Körpers. Eine Modifikation desselben ist der allen Vorticiden
zukommende tonnenförmige Schlund (Pharynx doliiformis). In
seinem feinen Bau ist er dem vorigen sehr ähnlich, aber doch auch
leicht wieder von ihm zu unterscheiden, weil er im ganzen eine
stärker entwickelte Muskulatur besitzt. Ausserdem ist seine Achse
der Körperachse immer parallel, oder doch nur wenig gegen
dieselbe geneigt. Mit seiner Spitze ist das Schlundtönnchen in den
weitaus meisten Fällen dem Vorderende des Wurmleibes zugekehrt.
Hierzu kommt noch der Pharynx variabilis, dessen Merkmal eine
grosse Fähigkeit zu Gestaltveränderungen ist, insofern er
mannigfache Windungen und Krümmungen auszuführen vermag
und ausserdem weit hervorgestülpt werden kann. Einen derartigen
Schlund finden wir bei dem merkwürdigen Plagiostoma Lemani,
einer Rhabdocöle von marinem Habitus, die aber im Süsswasser
lebt und von Prof. F. A . F o r e l zuerst im Genfersee entdeckt wurde.
In der Familie der Monotiden, welche gleichfalls nur einen einzigen
Vertreter im salzfreien Wasser hat[IV], begegnet uns eine
Schlundform, die als Pharynx plicatus bezeichnet wird. Der
hauptsächlichste Unterschied zwischen dieser und den anderen
Pharyngealformen besteht darin, dass bei ihr der zwischen innerer
und äusserer Muskelschicht gelegene Raum in offener Verbindung
mit der Leibeshöhle steht, und nicht — wie beim Ph. bulbosus —
gegen letztere abgeschlossen ist. Der Monotidenschlund stellt
demnach eine blosse Ringfalte der Körperhaut dar, die indessen
eine grosse Beweglichkeit zeigt und sich in überraschender Weise
rüsselartig verlängern kann.

[IV] Es ist dies der von mir 1884 in den Koppenteichen des
Riesengebirges aufgefundene Monotus lacustris. Z.

Zuletzt müssen wir auch noch des W a s s e r g e f ä s s s y s t e m s


gedenken, welches in Gestalt eines zarten Röhrennetzes mit zwei
stärkeren Hauptstämmen den Turbellarienkörper vom vordern bis
zum hintern Ende durchzieht. Die einzelnen Verästelungen
desselben zu verfolgen ist mit mannigfaltigen Schwierigkeiten
verknüpft, und daraus erklärt es sich, dass wir bei manchen Spezies
noch sehr wenig über den Gesamtverlauf dieser Röhrenleitung
wissen. Ihrer physiologischen Bedeutung nach stellt sie höchst
wahrscheinlich ein Ausscheidungsorgan dar, welches verbrauchte
Stoffe aufnimmt und ansammelt, um dieselben durch die Öffnungen,
mit denen die Hauptstämme an der Körperoberfläche ausmünden,
fortzuschaffen. Als Ausnahme finden wir bei sämtlichen Arten der
Gattung Stenostoma anstatt zweier nur einen e i n z i g e n
Hauptstamm, welcher in der Nähe des hinteren Körperendes sich
öffnet.

B. Dendrocoela.
(Dendrocoelida, L . v. G r a f f . )

Die vorstehend gegebene Orientierung über die G r u n d z ü g e der


Rhabdocöliden-Organisation hat im wesentlichen auch für die
grösseren Turbellarien mit dreizipfeligem und baumförmig
verzweigtem Darm Gültigkeit. Dieselben besitzen gleichfalls einen
Hautmuskelschlauch und eine Basalmembran mit einer darüber
befindlichen Lage von flimmernden Epithelzellen. Letztere sind
indessen nicht platt, sondern hoch cylindrisch gestaltet; in ihrem
Innern enthalten sie aber genau solche Stäbchen, wie wir sie bei den
Rhabdocölen antreffen. Ebenso ist bei unseren
Süsswasserdendrocölen (Tricladen) der Raum zwischen der
Hautmuskulatur und dem Darmkanal mit seinen Ausbuchtungen von
einem lockeren Bindegewebe und von zahlreichen (dorsoventral und
quer sich ausspannenden) Parenchymmuskelfasern erfüllt. Dazu
kommt noch das Vorhandensein eines reichmaschigen
Wassergefässsystems, der Besitz eines Gehirnganglions mit davon
ausstrahlenden Seitennerven und ein hermaphroditischer
Geschlechtsapparat, der aus Keim- und Dotterstock, blasigen
Hoden, sowie einem zapfenförmigen Begattungsorgan besteht. Eine
ausgebildete Leibeshöhle, wie sie bei vielen Rhabdocöliden
gefunden wird, existiert bei den Tricladen nicht, sodass man es sich
erklären kann, wenn die älteren Zoologen zur Bezeichnung eines
solchen Thatbestandes auf den Ausdruck „parenchymatöse
Würmer“ verfielen.
Das Darmepithel hat bei denselben genau die nämliche
Beschaffenheit wie bei den stabdarmigen Turbellarien. Die Zellen
desselben sind langgestreckt, nackt und häufig birnförmig verdickt.
Jede besitzt einen rundlichen Kern, der am basalen Ende liegt. Den
gleichen Verhältnissen begegneten wir bei den Rhabdocöliden.
Hinsichtlich des Schlundes stimmen die Planarien fast ganz genau
mit den Monotiden überein, die, wie bereits erwähnt wurde, einen
Pharynx plicatus besitzen. Über den feineren Bau desselben findet
man ausführliche Angaben in L . v. G r a f f s Rhabdocöliden-
Monographie (S. 87 und 88).
Wenn die Planarien fressen, so stülpen sie ihren Pharynx oft bis
zu einer erstaunlichen Länge aus dem Munde hervor. Er führt dabei
wurmförmige Bewegungen aus, als wenn er die geeignetsten
Nahrungsobjekte aussuchen wollte. Dabei erweitert sich sein freies
Ende gewöhnlich trompetenartig, sodass auch grössere Beutetiere
(Crustaceen, Insektenlarven z. B.) ergriffen und verschluckt werden
können. Trennt man den hervorgestreckten Tricladenrüssel durch
einen Scherenschnitt an seiner Wurzel ab, so fährt derselbe — wenn
er feucht gehalten wird — oft noch mehrere Stunden lang mit seinen
Gestaltveränderungen fort. Diese Lebenszähigkeit erklärt sich
hinlänglich durch die reichliche Innervation des in Rede stehenden
Organs, über welche wir durch I j i m a s Untersuchungen Aufschluss
erhalten haben. Etwa zwischen der äusseren Ringfaserschicht des
Pharynx und den Ausführungsgängen der Speicheldrüsen sind die
Nerven zu einem Plexus verbunden, der gegen das freie Ende hin
eine beträchtliche Anschwellung aufweist. An dem nicht minder
zählebigen Rüssel des Süsswasser-Monotus (Monotus lacustris) ist
von M . B r a u n und mir die Anwesenheit eines dicken Ringes von
Nervenfasern festgestellt worden, der auf Quer- und Längsschnitten
in der Mitte des Pharynx zum Vorschein kommt und einen deutlichen
Zusammenhang mit den ventralen Längsnerven erkennen lässt.
Sinnesnerven, die vom Gehirn aus zu den mehr oder minder
lappenartigen Seitenteilen des Kopfes laufen, sind, wie bei den
Rhabdocölen, so auch bei den Tricladen nachgewiesen. Ebenso
besitzt die Mehrzahl unserer Planarien S e h o r g a n e (Augen), die
entweder zu zweien auf der dorsalen Fläche des Kopfes stehen,
oder in grösserer Anzahl (40–60) den Rand des ganzen vorderen
Körperteiles umsäumen (Polycelis).
Die Planarien produzieren nach stattgehabter (wechselseitiger?)
Befruchtung Eier, die zu 30–40 Stück in ein kugeliges oder
elliptisches Cocon eingeschlossen sind. Letzteres wird mittels eines
weisslichen Sekretes an Wasserpflanzen befestigt. Und zwar
geschieht dies schon sehr früh im Jahre, etwa im Februar oder März.
Der Inhalt des Cocons besteht aus einer Flüssigkeit, in der sich eine
grosse Menge von Dotterzellen (über 10000 sind gezählt worden)
befinden, dazwischen ist aber nur die oben angeführte Anzahl von
Eiern sichtbar. Diese letzteren sind nackte Zellen von geringerer
Grösse als die Dotterelemente; sie haben nur 0.035 bis 0.044 mm im
Durchmesser. — Über die Embryonalentwickelung der
Süsswasserdendrocölen besitzen wir ausser Dr. J . I j i m a s
Beobachtungen an Dendrocoelum lacteum noch eine neuere Arbeit
des französischen Zoologen P a u l H a l l e z , die sehr ausführliche
Angaben und zahlreiche erläuternde Tafeln enthält[95].
Neben der geschlechtlichen Fortpflanzung kommt bei einigen
Planarien auch eine ungeschlechtliche durch Q u e r t e i l u n g vor. Ich
habe diese vielfach in Zweifel gezogene Thatsache 1885 an Planaria
subtentaculata Dugès (aus einem Bache bei Hirschberg i. Schl.) mit
Sicherheit festgestellt und seinerzeit detailliert beschrieben[96]. Der
Hauptsache nach verläuft jener Vorgang folgendermassen. Zuerst
zeigt sich am Beginn des hinteren Leibesdrittels (und zwar immer
dicht hinter dem Eingang zur Rüsseltasche) eine seichte
Einschnürung, welche von Tag zu Tag Fortschritte macht. Während
dieser Zeit liegen die Tiere oft stundenlang ganz still. Nach drei bis
vier Tagen bereits kann man mit der Lupe die ziemlich perfekt
gewordene Querteilung konstatieren. Die Abtrennung des
Tochtersprosses von der Mutter erfolgt nunmehr unter ganz
eigentümlichen Umständen. Merkwürdigerweise nämlich löst sich
derselbe erst in seiner mittleren Partie von letzterer ab, während er
zu beiden Seiten damit noch in Verbindung bleibt. Hat sich das
Tochterteilstück definitiv abgetrennt, so bemerkt man am Vorderende
desselben ein kleines, pigmentfreies Zäpfchen: den sich neu
bildenden Kopf. Nach Verlauf von 24 Stunden unterscheidet man
schon Augenpunkte an demselben. Demnächst bildet sich auch eine
neue Rüsselhöhle und ein neuer Pharynx aus, sodass das durch
Teilung des Mutter-Individuums entstandene Tier keinerlei
Organisationsmängel zeigt. Diese Teilungserscheinungen waren
aber nur während der warmen Sommermonate zu beobachten und
bemerkenswert ist dabei, dass an den sich so fortpflanzenden
Exemplaren keine Spur von Geschlechtswerkzeugen zu entdecken
war. Der nämliche Vorgang ist unlängst auch an einer anderen
Dendrocöle (Planaria albissima Vejd.) von Dr. E . S e k e r a beobachtet
worden, sodass die älteren Angaben von D a l y e l l und D u g è s ,
welche früher schon über Querteilung bei Planarien berichtet haben,
nunmehr bestätigt sind.
Zu den am meisten in unseren Gewässern verbreiteten Planarien
gehören ausser dem milchweissen Dendrocoelum lacteum Oerst.,
Polycelis nigra O. Fr. Müller, Planaria polychroa O. Schm. und Pl.
lugubris. Eine der grössten einheimischen Planarien ist das von Dr.
W. W e l t n e r im Tegelsee bei Berlin und später auch in der Spree
aufgefundene Dendrocoelum punctatum Pallas, welches im
ausgestreckten Zustande eine Länge von 3–4 cm erreicht[97]. Alle
diese Tiere sind in Grösse, Gestalt und Färbung ziemlich variabel,
und deshalb genügen solche äussere Merkmale bei der
Artbestimmung nicht. Hierzu müssen vielmehr die sehr
formbeständigen Geschlechtsorgane verwendet werden, deren
Analyse freilich in manchen Fällen ebenso zeitraubend wie schwierig
ist. Nur auf diesem Wege, der zuerst von O s c a r S c h m i d t betreten
wurde, gelangt man zu einer sicheren Identifizierung der Spezies.
Bei einer allgemeinen Orientierung, wie sie hier bezweckt wird,
darf schliesslich auch der Hinweis auf das Vorkommen von
L a n d p l a n a r i e n nicht fehlen. Und zwar kennen wir derartige Würmer
nicht bloss aus tropischen Ländern, sondern auch als Mitglieder der
einheimischen Fauna. Wir finden dieselben bei einiger Achtsamkeit
unter Holzscheiten, die im Walde lagern, zwischen feuchtem Moos
und an der Unterseite von Hutpilzen. Bis vor kurzem war nur eine
einzige einheimische Art bekannt, nämlich Rhynchodesmus
terrestris O. Fr. Müller. Die grössten Exemplare sind 2–2.5 cm lang
und von schwarzer Färbung; die Rückenseite ist stark gewölbt, die
Bauchfläche hingegen zu einer Kriechsohle ausgebildet. In ihren
Bewegungen sind die Tiere sehr träge, und wie es scheint, lieben sie
kühle und schattige Aufenthaltsorte[98]. Dr. J . v. K e n n e l fand
Exemplare von Rhynchodesmus in der Umgebung von Würzburg
(unter Steinen), Dr. H . S i m r o t h mehrere in den Wäldern bei Leipzig,
und ich welche in der Nähe von Hirschberg in Schlesien.
Unterirdisch lebend, d. h. im feuchten Erdreich sich aufhaltend,
ist 1887 von Fr. Ve j d o v s k y eine zweite einheimische Landplanarie
entdeckt worden, welche einer ganz neuen Gattung angehört. Sie ist
nur 4–6 mm gross und etwa 0.5 mm breit. Der genannte Prager
Forscher fand sie in einem Erdhaufen bei Bechlin in Böhmen, den er
eines anderen wissenschaftlichen Zweckes wegen durchsuchte. Das
betreffende Tierchen (Microplana humicola) ist vollkommen
durchsichtig, ermangelt der Kopflappen und besitzt nur auf der
Bauchseite eine Cilienbekleidung. Ihrem ungefähren Aussehen nach
ist sie in Fig. 50 wiedergegeben. Das Nähere darüber muss man aus
der darauf bezüglichen Abhandlung Prof. Ve j d o v s k y s ersehen[99].
Um endlich noch der Ve r w a n d t s c h a f t v o n
D e n d r o c ö l e n u n d R h a b d o c ö l e n ein Wort zu
widmen, so verdient Erwähnung: dass wir in
dem von Prof. M . B r a u n (1880) begründeten
Genus Bothrioplana ein interessantes
Verbindungsglied zwischen jenen beiden
Unterabteilungen kennen gelernt haben. Es
handelt sich dabei um Tiere, die in der Form
des Darmes und im Bau ihres Schlundes eine
fast vollständige Übereinstimmung mit den
Dendrocölen bekunden, während sie durch
mehrere andere Merkmale (Mangel der
Stäbchenstrassen, Anordnung der Rhabditen
zu Paketen, Besitz von Wimpergrübchen an
den Kopfseiten) an die Rhabdocölen
erinnern [100] . Braun fand von diesen
Fig. Turbellarien zwei Spezies in Dorpater
Fig. 51.
50. Brunnenschächten, und ich habe später (1886) Bothrioplana
Micro deren noch zwei aus dem Kleinen silesiaca.
plana Koppenteiche des Riesengebirges gefischt[101].
humic Ein Habitusbild der einen Art, die ich B.
ola. silesiaca genannt habe, ist in Fig. 51 S. 254 gegeben. Es ist
ein augenloses Tierchen von 2.5 mm Länge, an welchem
sofort das verbreiterte Kopfende auffällt. Mit diesem wühlt es unruhig
suchend beständig in dem feinen Mud umher, worin es sich aufhält.
Überhaupt sind diese Bothrioplanen durch äusserst hastige
Bewegungen charakterisiert, die im schroffen Gegensatz zu dem
ruhigen Dahingleiten der gewöhnlichen Planarien stehen. Die
Hautfarbe der kleinen Würmchen ist weiss oder hellgrau. Der Darm
schimmert von innen her bräunlich durch. Die gesamte
Körperoberfläche ist mit Cilien bedeckt und überall sieht man im
Epithel Stäbchenpakete, welche aus je drei Rhabditen bestehen.
Gelegentlich treten am Hinterende gewisse Haftorgane (Klebzellen)
hervor, wie sie bei vielen Rhabdocölen beobachtet werden. Der
hintere Körpersaum ist jederseits mit einzelnen steifen Borsten
besetzt, während das vordere Ende frei davon ist und nur die
gewöhnlichen kurzen Cilien trägt. Mit etwas längeren Wimpern
scheinen die beiden Wimpergruben (wg) zu beiden Seiten des
Kopfes ausgestattet zu sein. Der Verdauungskanal hat, wie unsere
Figur zeigt, eine gestreckt-ringförmige Gestalt, und hiervon lässt sich
die dreigabelige Beschaffenheit des Dendrocölen-Darmes
ungezwungen ableiten, wenn wir annehmen, dass die stärkere
Entwickelung des Schlundes bei den Tricladen den Anstoss zu einer
Kontinuitätstrennung in der unteren Ringhälfte gab. Dadurch
entstanden naturgemäss die beiden hinteren Darmschenkel der
Planarien, und es wurde Raum zur Unterbringung des mächtigen
Pharynx dieser Würmer geschaffen. Entschieden unterstützt wird
diese zuerst von M . B r a u n geäusserte Ansicht durch die Lage des
Schlundes unmittelbar hinter der Gabelungsstelle, und auch
dadurch, dass derselbe von hier aus ein ansehnliches Stück
zwischen die beiden in Frage kommenden Darmäste hineinragt.
Das Gehirn (c) liegt bei Bothrioplana silesiaca in der halsartigen
Einschnürung, mit welcher sich der breitere Kopfteil vom übrigen
Körper absetzt. Die zweite von mir im Kleinen Koppenteich
aufgefundene Spezies (B. Brauni) des nämlichen Genus ähnelt in
der Form ihres Gehirnganglions und im Verlauf der
Exkretionsgefässe den Rhabdocölen noch mehr als die
erstbeschriebene Art. Ihr fehlen auch die Wimpergrübchen, und die
Stäbchenpakete enthalten bei ihr eine grössere Anzahl (4–5)
Rhabditen. Jedes einzelne dieser Pakete macht den Eindruck, als
habe es eine leichte schraubenförmige Drehung um seine
Längsachse erfahren. Der Kopfteil ist bei dieser und auch bei der
vorigen Spezies fast vollkommen rhabditenfrei.
Durch diese Tiere wird, wie schon gesagt, die sonst zwischen
Rhabdocölen und Dendrocölen bestehende Kluft überbrückt, und
deshalb haben wir es in denselben mit recht interessanten
Übergangsformen zu thun, die des näheren Studiums wohl wert
sind. Hinsichtlich der Geschlechtswerkzeuge ist bis jetzt festgestellt,
dass die Keim- und Dotterstöcke paarig sind, und dass auf jeder
Seite eine Doppelreihe von Hodenbläschen im mittlern Teile des
Körpers vorhanden ist. Diese und die vorstehend berichteten
Befunde rechtfertigen es, dass wir die Bothrioplanen als niederstes
Genus den Tricladen anschliessen, wiewohl anderseits nicht zu
verkennen ist, dass sie in mehrfacher Hinsicht mit den Rhabdocölen
übereinstimmen.
Kurze Beschreibung einiger Rhabdocöliden-
Spezies.
Für den Zweck dieses Kapitels, welcher darin besteht, den Leser
in die Turbellarienfauna des Süsswassers einzuführen, empfiehlt es
sich nun, auf die vorhergegangene allgemeine Orientierung eine
Schilderung der am häufigsten vorkommenden Gattungen folgen zu
lassen. Dies kann am besten durch die Vorführung einzelner
Spezies geschehen, und hierbei werden wir Gelegenheit haben,
noch einige Punkte nachzutragen, die wir bei Beschreibung der
generellen Organisationsverhältnisse nur flüchtig berühren konnten
oder ganz übergehen mussten.
Fahndet man in unseren Gewässern auf Turbellarien, so besteht
das Fangergebnis am häufigsten aus Arten, welche den Gattungen
Macrostoma, Microstoma, Stenostoma, Mesostoma und Vortex
angehören. Aus diesen greifen wir daher je einen Vertreter heraus
und unterwerfen ihn einer etwas eingehenderen Schilderung.

Macrostoma viride E . v. B e n .

Dies ist ein etwa 2 mm grosses Tierchen, an dem man schon bei
Lupenbesichtigung den grünlich oder gelb gefärbten Darm erkennt.
Bei stärkerer Vergrösserung (Fig. 52) entdecken wir sofort ein
abgerundetes Vorderende und einen spatelartig geformten
Schwanzteil, der reichlich mit Stäbchenpaketen gespickt ist, die
zumteil über die Haut hervorragen. Auch der übrige Körper ist mit
solchen Rhabditenbündeln versehen, aber nicht in dem Masse wie
das Kopf- und Hinterende. Die Stäbchen liegen in sehr
verschiedener Anzahl (zu 2–5 Stück) beisammen und haben eine
keulenförmige Gestalt. Die Flimmerhaare der Epithelzellen sind sehr
fein und kurz; dazwischen stehen aber lange Geisselborsten, die
sich über die ganze Oberfläche des Tieres verbreiten. Im Übrigen
bietet die Organisation der Macrostomiden mancherlei primitive
Verhältnisse dar. Sie besitzen ein ganz einfaches Schlundrohr,
welches die schlitzförmige Mundöffnung (m) mit dem Darmsack (d)
verbindet. Das Gehirn (g) erscheint lediglich als eine
Bogenkommissur der beiden Längsnervenstämme, und
unterscheidet sich in Form und Masse nicht viel von diesen.
Dasselbe trägt indessen hochentwickelte Sehorgane, die mit einer
stark gewölbten Linse ausgestattet sind. Die Höhlung des
Darmkanals ist durchweg mit Cilien besetzt, deren Länge etwa der
Höhe der Epithelzellen gleichkommt, denen sie aufsitzen. Zu beiden
Seiten des Darms liegen die kompakten kegelförmigen Hoden (h)
und dicht dahinter die paarigen Ovarien (ov). Bei p sehen wir den
Penis, der bei allen Arten der Gattung Macrostoma mit einem
chitinösen Ansatze versehen ist. Bei der in Rede stehenden Spezies
ist letzterer S-förmig, aber so, dass die beiden Krümmungen nicht in
einer Ebene liegen. Fig. 53 stellt diese Penis-Armatur bei sehr
starker Vergrösserung dar.
Fig. 52.
Macrostoma viride.

Fig.
53.
S-
förmig
es
Kopul
ations
organ
von
Macro
stoma
viride.
Fig. 54.
Spermatogenese (M.
viride).
Was das W a s s e r g e f ä s s s y s t e m anlangt, so kann man sich bei
M. viride die zwei seitlichen Hauptstämme leicht zur Ansicht bringen.
Es scheint, dass sich dieselben oberhalb des Mundes vereinigen
und noch einige kleine Verästelungen nach dem Vorderende
hinschicken.
Die Macrostomiden gehören zu den Rhabdocölen mit zwei
Geschlechtsöffnungen, einer männlichen und einer weiblichen. Die
erstere liegt im verbreiterten Hinterteile, die andere in der
ungefähren Höhe der Ovarien; beide natürlich auf der Bauchseite.
Bei Macrostoma viride konnte ich auch einige Beobachtungen
über die S p e r m a t o z o e n - E n t w i c k e l u n g machen, welche diesen
Vorgang in seinen Hauptzügen klarstellen. Zerzupft oder zerquetscht
man einen reifen Hoden vorsichtig auf dem Objektträger, so hat man
in einem und demselben Präparate gleich alle Stadien der
Spermatogenese beisammen. Ich habe dieselben der Reihe nach in
Fig. 54 abgebildet und mit Buchstaben bezeichnet. Den
Ausgangspunkt für die Entwickelung der Samenkörper bilden die
vollkommen kugeligen und ganz durchsichtigen Hodenzellen oder
S p e r m a t o g o n i e n (a). Diese zumeist mehrkernigen Gebilde
verwandeln sich durch Einschnürung ihres Protoplasmaleibes in
ebensoviele S p e r m a t o c y t e n oder Samenzellen (d), die aber
zunächst in Zusammenhang mit einander bleiben. Jede einzelne
Spermatocyte lässt zwei kleine Fortsätze aus sich hervorsprossen,
von welchen der eine in der Folge zum Schwanzfaden des
Spermatozoon, der andere zur sogenannten „Nebengeissel“
desselben wird. Die einkernigen Spermatogonien (b) entwickeln sich
genau auf dieselbe Weise; nur zuweilen kommt es vor (c), dass die
Nebengeissel schon weit hervorgesprosst ist, ehe sich noch irgend
eine Spur von der Bildung des Schwanzfadens zeigt. Bei
fortschreitender Entwickelung lösen sich die Spermatocyten aus
ihrem ursprünglichen Verband (d) und nehmen das in e dargestellte
Aussehen an, indem sich ihr protoplasmatischer Teil in die Länge
streckt. Erst zu allerletzt kommt die bislang im Ruhezustande
verbliebene Kernsubstanz in Bewegung, um in dem immer
spindelförmiger werdenden Spermatozoenkopfe sich gleichmässig
zu verteilen. In f sehen wir dann das völlig fertige Samenkörperchen
von Macrostoma viride, wie es zu vielen hunderten in dem Präparate
eines zerdrückten Hodens vorhanden zu sein pflegt. Der
Schwanzteil dieser Körperchen besitzt eine ausserordentlich
lebhafte Schlängelbewegung, wogegen die steife Nebengeissel nur
mit mässiger Geschwindigkeit hin und her pendelt.
Die am meisten verbreitete Spezies der Gattung Macrostoma ist
übrigens nicht diese, sondern M. hystrix Oerst.; in den wesentlichen
Bauverhältnissen stimmen aber beide mit einander überein. Die
letztgenannte Art ist dadurch merkwürdig, dass sie nicht bloss im
süssen, sondern auch im salzigen Wasser vorkommt. Auch lebt sie
nicht bloss in seichten Pfützen und Tümpeln, sondern verträgt
ebensogut den Aufenthalt in beträchtlichen Tiefen. Nach einer
Angabe von D u p l e s s i s ist sie sogar noch im Grundschlamme des
Genfersees zu finden[102]. An schwimmenden Holzstückchen und
dem Wellenschlag ausgesetzten Wasserpflanzen vermögen sich die
Tierchen mit Hilfe ihrer „K l e b z e l l e n “ festzuhalten, welche am untern
Saume des spatelähnlichen Hinterendes in grosser Anzahl befindlich
sind. Solchen eigentümlichen Haftapparaten begegnen wir auch bei
mehreren anderen Turbellariengattungen.

Microstoma lineare O e r s t .
Einzelindividuen von dieser Spezies kommen höchst selten vor;
gewöhnlich findet man nur Ketten, die, wie Fig. 55 veranschaulicht,
aus mehreren ungleichaltrigen Exemplaren bestehen. Dieser Befund
findet seine Erklärung in der Thatsache, dass Microstoma lineare
sich vorwiegend durch Querteilung oder, richtiger gesagt, durch
t e r m i n a l e K n o s p e n b i l d u n g fortpflanzt. In nachstehender Figur
haben wir eine Kette von vier Individuen vor uns, deren
Entwickelung wie folgt zu denken ist. Aus dem ursprünglichen
Muttertiere (A) ging B als Tochterspross auf die nämliche Art hervor,
wie jetzt die Knospe b aus ihm selbst, oder wie a aus A. Der Zeit
nach ist die Reihenfolge dabei diese: A, B, b, a. Das heisst: A
erzeugte zunächst B; hierauf entstand die Knospe b und dann erst
die mit a bezeichnete neue aus dem alten Mutterindividuum A.
Bei genauerer Beobachtung dieser eigentümlichen
Fortpflanzungsweise bemerkt man, dass stets nur das hinterste
Drittel des Muttertieres zur Erzeugung des Tochtersprosses
verwendet wird. Mit dem Auftreten zweier Augenpunkte und der
Bildung einer Einschnürung, welche die künftige Trennungsstelle
andeutet, nimmt der Knospungsprozess seinen Anfang. In der Folge
vergrössert sich das Tochterstück allmählich und holt mit seinem
rascheren Wachstum den sich gleichfalls regenerierenden
mütterlichen Teil ein, bis beide in ihren Dimensionen sich fast
vollkommen gleichen. Mit der Neubildung eines Gehirns und
Schlundes am Spross erreicht die Entwickelung des letztern ihren
Abschluss, und es erfolgt seine Lostrennung vom
Stammorganismus. Aber bevor er selbst noch fertig ausgebildet war,
wurde in seinem hintern Leibesdrittel bereits die dritte Generation
angelegt, bezüglich deren sich der nämliche Sprossungsvorgang
wiederholt, und so geht diese Vermehrung immer fort, den ganzen
Sommer hindurch.

You might also like