Foundations of ARM64 Linux Debugging, Disassembling, and Reversing: Analyze Code, Understand Stack Memory Usage, and Reconstruct Original C/C++ Code with ARM64 / Основы отладки, дизассемблирования и реверсирования ARM64 Linux: Анализ кода, понимание использования стековой памяти и восстановление исходного кода C/C++ с ARM64 Год издания: 2023 Автор: Vostokov Dmitry / Востоков Дмитрий Издательство: Apress Media ISBN: 978-1-4842-9082-8 Язык: Английский Формат: PDF, EPUB Качество: Издательский макет или текст (eBook) Интерактивное оглавление: Да Количество страниц: 180 Описание: Gain a solid understanding of how Linux C and C++ compilers generate binary code. This book explains the reversing and binary analysis of ARM64 architecture now used by major Linux cloud providers and covers topics ranging from writing programs in assembly language, live debugging, and static binary analysis of compiled C and C++ code. It is ideal for those working with embedded devices, including mobile phones and tablets. Using the latest version of Red Hat, you'll look closely at the foundations of diagnostics of core memory dumps, live and postmortem debugging of Linux applications, services, and systems. You'll also work with the GDB debugger and use it for disassembly and reversing. This book uses practical step-by-step exercises of increasing complexity with explanations and many diagrams, including some necessary background topics. In addition, you will be able to analyze such code confidently, understand stack memory usage, and reconstruct original C/C++ code. And as you'll see, 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 provides the background knowledge and practical foundations you’ll need to understand internal Linux program structure and behavior. Foundations of ARM64 Linux Debugging, Disassembling, and Reversing is the perfect companion to Foundations of Linux Debugging, Disassembling, and Reversing for readers interested in the cloud or cybersecurity. What You'll Learn Review the basics of ARM64 assembly language Examine the essential GDB debugger commands for debugging and binary analysis Study C and C++ compiler code generation with and without compiler optimizations Look at binary code disassembly and reversing patterns See how pointers in C and C++ are implemented and used Who This Book Is For Software support and escalation engineers, cloud security engineers, site reliability engineers, DevSecOps, platform engineers, software testers, Linux C/C++ software engineers and security researchers without ARM64 assembly language background, and beginners learning Linux software reverse engineering techniques. Получите четкое представление о том, как компиляторы Linux C и C++ генерируют двоичный код. В этой книге объясняется реверсивный и двоичный анализ архитектуры ARM64, которая в настоящее время используется крупнейшими облачными провайдерами Linux, и рассматриваются различные темы, начиная от написания программ на языке ассемблера, оперативной отладки и статического двоичного анализа скомпилированного кода C и C++. Он идеально подходит для тех, кто работает со встроенными устройствами, включая мобильные телефоны и планшеты. Используя последнюю версию Red Hat, вы внимательно изучите основы диагностики дампов памяти ядра, оперативной и посмертной отладки приложений, служб и систем Linux. Вы также будете работать с отладчиком GDB и использовать его для дизассемблирования и реверсирования. В этой книге используются практические пошаговые упражнения возрастающей сложности с объяснениями и множеством диаграмм, включая некоторые необходимые справочные разделы. Кроме того, вы сможете уверенно анализировать такой код, понимать использование стековой памяти и реконструировать исходный код на C/C++. И, как вы увидите, криминалистика памяти, анализ вредоносных программ и уязвимостей требуют понимания языка ассемблера ARM64 и того, как компиляторы C и C++ генерируют код, включая расположение памяти и указатели. Эта книга предоставляет базовые знания и практические основы, необходимые для понимания внутренней структуры и поведения программ Linux. Основы отладки, дизассемблирования и реверсирования ARM64 Linux - идеальное дополнение к основам отладки, дизассемблирования и реверсирования Linux для читателей, интересующихся облаком или кибербезопасностью. Чему ты научишься Ознакомьтесь с основами языка ассемблера ARM64 Изучите основные команды отладчика GDB для отладки и двоичного анализа Изучите генерацию кода компиляторами C и C++ с оптимизацией компилятора и без нее Посмотрите на дизассемблирование двоичного кода и обратные шаблоны Посмотрите, как реализуются и используются указатели в C и C++ Для кого предназначена Эта Книга Инженеры по поддержке программного обеспечения и эскалации, инженеры по облачной безопасности, инженеры по надежности сайтов, разработчики программного обеспечения, инженеры платформ, тестировщики программного обеспечения, инженеры-программисты Linux C/C++ и исследователи безопасности без знания языка ассемблера ARM64, а также новички, изучающие методы реверс-инжиниринга программного обеспечения Linux.
Примеры страниц
Оглавление
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 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 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 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 “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 Chapter 14: S ummary 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
Vostokov Dmitry / Востоков Дмитрий - Foundations of ARM64 Linux Debugging, Disassembling, and Reversing / Основы отладки, дизассемблирования и реверсирования ARM64 Linux [2023, PDF, EPUB, ENG] download torrent for free and without registration
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum