万本电子书0元读

万本电子书0元读

顶部广告

Mastering Assembly Programming电子书

售       价:¥

5人正在读 | 0人评论 9.8

作       者:Alexey Lyashko

出  版  社:Packt Publishing

出版时间:2017-09-27

字       数:31.2万

所属分类: 进口书 > 外文原版书 > 电脑/网络

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
Incorporate the assembly language routines in your high level language applications About This Book ? Understand the Assembly programming concepts and the benefits of examining the AL codes generated from high level languages ? Learn to incorporate the assembly language routines in your high level language applications ? Understand how a CPU works when programming in high level languages Who This Book Is For This book is for developers who would like to learn about Assembly language. Prior programming knowledge of C and C++ is assumed. What You Will Learn ? Obtain deeper understanding of the underlying platform ? Understand binary arithmetic and logic operations ? Create elegant and efficient code in Assembly language ? Understand how to link Assembly code to outer world ? Obtain in-depth understanding of relevant internal mechanisms of Intel CPU ? Write stable, efficient and elegant patches for running processes In Detail The Assembly language is the lowest level human readable programming language on any platform. Knowing the way things are on the Assembly level will help developers design their code in a much more elegant and efficient way. It may be produced by compiling source code from a high-level programming language (such as C/C++) but can also be written from scratch. Assembly code can be converted to machine code using an assembler. The first section of the book starts with setting up the development environment on Windows and Linux, mentioning most common toolchains. The reader is led through the basic structure of CPU and memory, and is presented the most important Assembly instructions through examples for both Windows and Linux, 32 and 64 bits. Then the reader would understand how high level languages are translated into Assembly and then compiled into object code. Finally we will cover patching existing code, either legacy code without sources or a running code in same or remote process. Style and approach This book takes a step-by-step, detailed approach to Comprehensively learning Assembly Programming.
目录展开

Title Page

Copyright

Mastering Assembly Programming

Credits

About the Author

About the Reviewer

www.PacktPub.com

Why subscribe?

Customer Feedback

Preface

What this book covers

What you need for this book

Who this book is for

Conventions

Reader feedback

Customer support

Downloading the example code

Errata

Piracy

Questions

Intel Architecture

Processor registers

General purpose registers

Accumulators

Counter

Stack pointer

Source and destination indices

Base pointer

Instruction pointer

Floating point registers

XMM registers

Segment registers and memory organization

Real mode

Protected mode - segmentation

Protected mode - paging

Long mode - paging

Control registers

Debug registers

Debug address registers DR0 - DR3

Debug control register (DR7)

Debug status register (DR6)

The EFlags register

Bit #0 - carry flag

Bit #2 - parity flag

Bit #4 - adjust flag

Bit #6 - zero flag

Bit #7 - sign flag

Bit #8 - trap flag

Bit #9 - interrupt enable flag

Bit #10 - direction flag

Bit #11 - overflow flag

Remaining bits

Summary

Setting Up a Development Environment

Microsoft Macro Assembler

Installing Microsoft Visual Studio 2017 Community

Setting up the Assembly project

GNU Assembler (GAS)

Installing GAS

Step 1 - installing GAS

Step 2 - let's test

Flat Assembler

Installing the Flat Assembler

The first FASM program

Windows

Linux

Summary

Intel Instruction Set Architecture (ISA)

Assembly source template

The Windows Assembly template (32-bit)

The Linux Assembly template (32-bit)

Data types and their definitions

A debugger

The instruction set summary

General purpose instructions

Data transfer instructions

Binary Arithmetic Instructions

Decimal arithmetic instructions

Logical instructions

Shift and rotate instructions

Bit and byte instructions

Execution flow transfer instructions

String instructions

ENTER/LEAVE

Flag control instructions

Miscellaneous instructions

FPU instructions

Extensions

AES-NI

SSE

Example program

Summary

Memory Addressing Modes

Addressing code

Sequential addressing

Direct addressing

Indirect addressing

RIP based addressing

Addressing data

Sequential addressing

Direct addressing

Scale, index, base, and displacement

RIP addressing

Far pointers

Summary

Parallel Data Processing

SSE

Registers

Revisions

Biorhythm calculator

The idea

The algorithm

Data section

The code

Standard header

The main() function

Data preparation steps

Calculation loop

Adjustment of sine input values

Computing sine

Exponentiation

Factorials

AVX-512

Summary

Macro Instructions

What are macro instructions?

How it works

Macro instructions with parameters

Variadic macro instructions

An introduction to calling conventions

cdecl (32-bit)

stdcall (32-bit)

Microsoft x64 (64-bit)

AMD64 (64-bit)

A note on Flat Assembler's macro capabilities

Macro instructions in MASM and GAS

Microsoft Macro Assembler

The GNU Assembler

Other assembler directives (FASM Specific)

The conditional assembly

Repeat directives

Inclusion directives

The include directive

File directive

Summary

Data Structures

Arrays

Simple byte arrays

Arrays of words, double words, and quad words

Structures

Addressing structure members

Arrays of structures

Arrays of pointers to structures

Linked lists

Special cases of linked lists

Stack

Queue and deque

Priority queues

Cyclic linked list

Summary for special cases of linked lists

Trees

A practical example

Example - trivial cryptographic virtual machine

Virtual machine architecture

Adding support for a virtual processor to the Flat Assembler

Virtual code

The virtual processor

Searching the tree

The loop

Tree balancing

Sparse matrices

Graphs

Summary

Mixing Modules Written in Assembly and Those Written in High-Level Languages

Crypto Core

Portability

Specifying the output format

Conditional declaration of code and data sections

Exporting symbols

Core procedures

Encryption/decryption

Setting the encryption/decryption parameters

f_set_data_pointer

f_set_data_length

GetPointers()

Interfacing with C/C++

Static linking - Visual Studio 2017

Static linking - GCC

Dynamic linking

Assembly and managed code

Native structure versus managed structure

Importing from DLL/SO and function pointers

Summary

Operating System Interface

The rings

System call

System call hardware interface

Direct system calls

Indirect system calls

Using libraries

Windows

Linking against object and/or library files

Object file

Producing the executable

Importing procedures from DLL

Linux

Linking against object and/or library files

Object file

Producing the executable

Dynamic linking of ELF

The code

Summary

Patching Legacy Code

The executable

The issue

PE files

Headers

Imports

Gathering information

Locating calls to gets()

Preparing for the patch

Importing fgets()

Patching calls

Shim code

Applying the patch

A complex scenario

Preparing the patch

Adjusting file headers

Appending a new section

Fixing the call instruction

ELF executables

LD_PRELOAD

A shared object

Summary

Oh, Almost Forgot

Protecting the code

The original code

The call

The call obfuscation macro

A bit of kernel space

LKM structure

LKM source

.init.text

.exit.text

.rodata.str1.1

.modinfo

.gnu.linkonce.this_module

__versions

Testing the LKM

Summary

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部