Ïðèìåíåíèå èñêèíîâ - øîññå èìïåðèàëèçìà (Ñòåíãàçåòà ðóñèôèêàòîðîâ ÈÒ)

Èíôîðìàöèÿ î ïîëüçîâàòåëå

Ïðèâåò, Ãîñòü! Âîéäèòå èëè çàðåãèñòðèðóéòåñü.



2023, Duntemann J., x64 Assembly Language Step-by-Step: Programming wi

Ñîîáùåíèé 1 ñòðàíèöà 2 èç 2

1

2023, Duntemann J., x64 Assembly Language Step-by-Step: Programming with Linux
[html]<img src="data:image/jpeg;base64,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" />[/html]

Áàÿí, îêàçûâàåòñÿ:
2024, Duntemann Jeff, x64 Assembly Language Step-by-Step.

Îòðåäàêòèðîâàíî Ëèñ (2024-11-30 02:39:22)

0

2

Chapter 1
    It’s All in the Plan ... 1
    Another Pleasant Valley Saturday ... 1
    Steps and Tests ... 3
    More Than Two Ways? ... 3
    Computers Think Like Us ... 4
    Had This Been the Real Thing . . ... 5
    Assembly Language Programming As a Square Dance ... 5
    Assembly Language Programming As a Board Game ... 6
    Code and Data ... 8
    Addresses ... 8
    Metaphor Check! ... 9

Chapter 2
    Alien Bases ... 11
    The Return of the New Math Monster ... 11
        Counting in Martian ... 12
        Dissecting a Martian Number ... 14
        The Essence of a Number Base ... 16
    Octal: How the Grinch Stole Eight and Nine ... 16
        Who Stole Eight and Nine? ... 17
    Hexadecimal: Solving the Digit Shortage ... 20
    From Hex to Decimal and from Decimal to Hex ... 24
        From Hex to Decimal ... 24
        From Decimal to Hex ... 25
    Practice. Practice! PRACTICE! ... 27
    Arithmetic in Hex ... 28
        Columns and Carries ... 30
        Subtraction and Borrows ... 31
        Borrows Across Multiple Columns ... 33
        What’s the Point? ... 33
    Binary ... 34
        Values in Binary ... 36
        Why Binary? ... 38
    Hexadecimal as Shorthand for Binary ... 38
    Prepare to Compute ... 40

Chapter 3
    Lifting the Hood ... 41
    RAXie, We Hardly Knew Ye ... 41
        Gus to the Rescue ... 42
    Switches, Transistors, and Memory ... 43
        One If by Land... ... 43
        Transistor Switches ... 44
        The Incredible Shrinking Bit ... 46
        Random Access ... 47
        Memory Access Time ... 49
        Bytes, Words, Double Words, and Quad Words ... 50
        Pretty Chips All in a Row ... 51
    The Shop Supervisor and the Assembly Line ... 54
        Talking to Memory ... 55
        Riding the Data Bus ... 56
        The Shop Supervisor’s Pockets ... 57
        The Assembly Line ... 58
    The Box That Follows a Plan ... 58
        Fetch and Execute ... 60
        The Supervisor’s Innards ... 61
        Changing Course ... 62
    What vs. How: Architecture and Microarchitecture ... 63
        Evolving Architectures ... 64
        The Secret Machinery in the Basement ... 65
    Enter the Plant Manager ... 67
        Operating Systems: The Corner Office ... 67
        BIOS: Software, Just Not as Soft ... 68
        Multitasking Magic ... 68
        Promotion to Kernel ... 70
        The Core Explosion ... 70
        The Plan ... 72

Chapter 4
    Location, Location, Location ... 73
    The Joy of Memory Models ... 73
        16 Bits’ll Buy You 64 KB ... 75
        The Nature of a Megabyte ... 78
        Backward Compatibility and Virtual 86 Mode ... 79
        16-­Bit Blinders ... 79
    The Nature of Segments ... 80
        A Horizon, Not a Place ... 84
        Making 20-­Bit Addresses Out of 16-­Bit Registers ... 84
    Segment Registers ... 87
        Segment Registers and x64 ... 88
        General-­Purpose Registers ... 88
        Register Halves ... 91
        The Instruction Pointer ... 92
        The Flags Register ... 94
        Math Coprocessors and Their Registers ... 94
    The Four Major Assembly Programming Models ... 95
        Real-­Mode Flat Model ... 95
        Real-­Mode Segmented Model ... 97
        32-­Bit Protected Mode Flat Model ... 99
        64-­Bit Long Mode ... 101

Chapter 5
    The Right to Assemble ... 103
    The Nine and Sixty Ways to Code ... 103
    Files and What’s Inside Them ... 104
        Binary vs. Text Files ... 105
        Looking at Binary File Internals with the GHex Hex Editor ... 106
        Interpreting Raw Data ... 110
        “Endianness” ... 111
    Text In, Code Out ... 115
        Assembly Language ... 116
        Comments ... 118
        Beware “Write-­Only” Source Code! ... 119
        Object Code, Linkers, and Libraries ... 120
        Relocatability ... 123
    The Assembly Language Development Process ... 123
        The Discipline of Working Directories ... 125
        Editing the Source Code File ... 126
        Assembling the Source Code File ... 126
        Assembler Errors ... 127
        Back to the Editor ... 128
        Assembler Warnings ... 129
    Linking the Object Code File ... 130
        Linker Errors ... 131
        Testing the EXE File ... 131
        Errors vs. Bugs ... 132
        Are We There Yet? ... 133
        Debuggers and Debugging ... 133
    Taking a Trip Down Assembly Lane ... 134
        Installing the Software ... 134
        Step 1: Edit the Program in an Editor ... 137
        Step 2: Assemble the Program with NASM ... 138
        Step 3: Link the Program with ld ... 140
        Step 4: Test the Executable File ... 141
        Step 5: Watch It Run in the Debugger ... 141

Chapter 6
    A Place to Stand, with Access to Tools ... 143
    Integrated Development Environments ... 143
    Introducing SASM ... 146
        Configuring SASM ... 147
        SASM’s Fonts ... 148
        Using a Compiler to Link ... 149
        A Quick Tour of SASM ... 152
        SASM’s Editor ... 152
        What SASM Demands of Your Code ... 152
    Linux and Terminals ... 153
        The Linux Console ... 153
        Character Encoding in Konsole ... 154
        The Three Standard Unix Files ... 156
        I/O Redirection ... 158
        Simple Text Filters ... 159
        Using Standard Input and Standard Output from Inside SASM ... 161
        Terminal Control with Escape Sequences ... 161
        So Why Not GUI Apps ... 163
    Using Linux Make ... 164
        Dependencies ... 165
        When a File Is Up-­to-­Date ... 167
        Chains of Dependencies ... 167
        Invoking Make ... 169
        Creating a Custom Key Binding for Make ... 170
        Using Touch to Force a Build ... 172
    Debugging with SASM ... 172
        Pick up Your Tools. . .... 174

Chapter 7
    Following Your Instructions ... 175
    Build Yourself a Sandbox ... 176
        A Minimal NASM Program for SASM ... 176
    Instructions and Their Operands ... 178
    Source and Destination Operands ... 178
        Immediate Data ... 179
        Register Data ... 181
        Memory Data and Effective Addresses ... 184
        Confusing Data and Its Address ... 185
        The Size of Memory Data ... 185
        The Bad Old Days ... 186
    Rally Round the Flags, Boys! ... 186
        Flag Etiquette ... 190
        Watching Flags from SASM ... 190
        Adding and Subtracting One with INC and DEC ... 191
        How Flags Change Program Execution ... 192
        How to Inspect Variables in SASM ... 194
    Signed and Unsigned Values ... 195
        Two’s Complement and NEG ... 196
        Sign Extension and MOVSX ... 198
    Implicit Operands and MUL ... 200
        MUL and the Carry Flag ... 202
        Unsigned Division with DIV ... 203
        MUL and DIV Are Slowpokes ... 204
    Reading and Using an Assembly Language Reference ... 205
        Memory Joggers for Complex Memories ... 205
        An Assembly Language Reference for Beginners ... 206
        Flags ... 207
    NEG Negate (Two’s Complement; i.e., Multiply by −1) ... 208
        Flags Affected ... 208
        Legal Forms ... 208
        Examples ... 208
        Notes ... 208
        Legal Forms ... 209
        Operand Symbols ... 209
        Examples ... 210
        Notes ... 210
        What’s Not Here. . . 210

Chapter 8
    Our Object All Sublime ...  213
    The Bones of an Assembly Language Program ...  213
        The Initial Comment Block ... 215
        The .data Section ... 216
        The .bss Section ... 216
        The .text Section ... 217
        Labels ... 217
        Variables for Initialized Data ... 218
        String Variables ... 219
        Deriving String Length with EQU and $ ... 221
    Last In, First Out via the Stack ... 223
        Five Hundred Plates an Hour ... 223
        Stacking Things Upside Down ... 225
        Push-­y Instructions ... 226
        POP Goes the Opcode ... 227
        PUSHA and POPA Are Gone ... 228
        Pushing and Popping in Detail ... 229
        Storage for the Short Term ... 231
    Using Linux Kernel Services Through Syscall ... 231
        X64 Kernel Services via the SYSCALL Instruction ... 231
        ABI vs. API? ... 232
        The ABI’s Register Parameter Scheme ... 233
        Exiting a Program via SYSCALL ... 234
        Which Registers Are Trashed by SysCall? ... 235
    Designing a Nontrivial Program ... 235
        Defining the Problem ... 235
        Starting with Pseudocode ... 236
        Successive Refinement ... 237
        Those Inevitable “Whoops!” Moments ... 241
        Scanning a Buffer ... 242
        “Off by One” Errors ... 244
        From Pseudocode to Assembly Code ... 246
        The SASM Output Window Gotcha ... 248
    Going Further ... 248

Chapter 9
    Bits, Flags, Branches, and Tables ... 251
    Bits Is Bits (and Bytes Is Bits) ... 251
        Bit Numbering ... 252
        “It’s the Logical Thing to Do, Jim. . .” ... 252
        The AND Instruction ... 253
        Masking Out Bits ... 254
        The OR Instruction ... 255
        The XOR Instruction ... 256
        The NOT Instruction ... 257
        Segment Registers Don’t Respond to Logic! ... 258
    Shifting Bits ... 258
        Shift by What? ... 258
        How Bit Shifting Works ... 259
        Bumping Bits into the Carry Flag ... 260
        The Rotate Instructions ... 260
        Rotating Bits Through the Carry Flag ... 261
        Setting a Known Value into the Carry Flag ... 262
    Bit-­Bashing in Action ... 262
        Splitting a Byte into Two Nybbles ... 264
        Shifting the High Nybble into the Low Nybble ... 265
        Using a Lookup Table ... 266
        Multiplying by Shifting and Adding ... 267
    Flags, Tests, and Branches ... 270
        Unconditional Jumps ... 271
        Conditional Jumps ... 271
        Jumping on the Absence of a Condition ... 272
        Flags ... 273
        Comparisons with CMP ...  274
        A Jungle of Jump Instructions ... 275
        “Greater Than” Versus “Above”  ... 275
        Looking for 1-­Bits with TEST ... 277
        Looking for 0-­Bits with BT ... 279
    X64 Long Mode Memory Addressing in Detail ... 279
        Effective Address Calculations ... 281
        Displacements ... 282
        The x64 Displacement Size Problem ... 283
        Base Addressing ... 283
        Base + Displacement Addressing ... 283
        Base + Index Addressing ... 284
        Index X Scale + Displacement Addressing ... 285
        Other Addressing Schemes ... 287
        LEA: The Top-­Secret Math Machine ...  289
    Character Table Translation ...  290
        Translation Tables ...  291
        Translating with MOV or with XLAT ...  293
    Tables Instead of Calculation ... 298

Chapter 10
    Dividing and Conquering ... 299
    Boxes within Boxes ... 300
        Procedures as Boxes for Code ... 301
    Calling and Returning ... 309
        Calls Within Calls ... 311
        The Dangers of Accidental Recursion ... 313
        A Flag Etiquette Bug to Beware Of ... 314
        Procedures and the Data They Need ... 315
        Saving the Caller’s Registers ... 316
        Preserving Registers Across Linux System Calls ... 317
        PUSHAD and POPAD Are Gone ... 319
        Local Data ... 321
        Placing Constant Data in Procedure Definitions ... 322
        More Table Tricks ... 323
    Local Labels and the Lengths of Jumps ... 325
        “Forcing” Local Label Access ... 328
        Short, Near, and Far Jumps ... 329
    Building External Procedure Libraries ... 330
        When Tools Reach Their Limits ... 330
        Using Include Files in SASM ... 331
        Where SASM’s Include Files Must Be Stored ... 337
        The Best Way to Create an Include File Library ... 338
        Separate Assembly and Modules ... 339
        Global and External Declarations ... 339
        The Mechanics of Globals and Externals ... 342
        Linking Libraries into Your Programs ... 351
        The Dangers of Too Many Procedures and Too Many Libraries ... 352
    The Art of Crafting Procedures ... 352
        Maintainability and Reuse ... 353
        Deciding What Should Be a Procedure ... 354
        Use Comment Headers! ... 355
    Simple Cursor Control in the Linux Console ... 356
        Console Control Cautions ... 636
    Creating and Using Macros ... 364
        The Mechanics of Macro Definition ... 366
        Defining Macros with Parameters ... 371
        The Mechanics of Invoking Macros ... 372
        Local labels Within Macros ... 373
        Macro Libraries as Include Files ... 374
        Macros vs. Procedures: Pros and Cons ... 375

Chapter 11
    Strings and Things ... 377
    The Notion of an Assembly Language String ... 378
        Turning Your “String Sense” Inside-­Out ... 378
        Source Strings and Destination Strings ... 379
        A Text Display Virtual Screen ... 379
    REP STOSB, the Software Machine Gun ... 387
        Machine-­Gunning the Virtual Display ... 388
        Executing the STOSB Instruction ... 389
        STOSB and the Direction Flag DF ... 390
        Defining Lines in the Display Buffer ... 391
        Sending the Buffer to the Linux Console ... 391
    The Semiautomatic Weapon: STOSB Without REP ... 392
        Who Decrements RCX? ... 392
        The LOOP Instructions ...  393
        Displaying a Ruler on the Screen ... 394
        MUL Is Not IMUL ... 395
        Ruler’s Lessons ... 396
        The Four Sizes of STOS ... 396
        Goodbye, BCD Math ... 397
    MOVSB: Fast Block Copies ... 397
        DF and Overlapping Block Moves ... 398
        Single-­Stepping REP String Instructions ... 401
    Storing Data to Discontinuous Strings ... 402
        Displaying an ASCII Table ... 402
        Nested Instruction Loops ... 404
        Jumping When RCX Goes to 0 ... 405
        Closing the Inner Loop ... 406
        Closing the Outer Loop ... 407
        Showchar Recap ... 408
    Command-­Line Arguments, String Searches, and the Linux Stack ... 408
        Displaying Command-­Line Arguments from SASM ... 408
        String Searches with SCASB ... 411
        REPNE vs. REPE ... 413
        You Can’t Pass Command-­Line Arguments to Programs Within SASM ... 413
    The Stack, Its Structure, and How to Use It ... 414
        Accessing the Stack Directly ... 417
        Program Prologs and Epilogs ... 419
        Addressing Data on the Stack ... 420
        Don’t Pop! ... 422

Chapter 12
    Heading Out to C ... 423
    What’s GNU? ... 424
        The Swiss Army Compiler ... 425
        Building Code the GNU Way ... 425
        SASM Uses GCC ... 427
        How to Use gcc in Assembly Work ... 427
        Why Not gas? ... 428
    Linking to the Standard C Library ... 429
        C Calling Conventions ... 431
        Callers, Callees, and Clobbers ... 431
        Setting Up a Stack Frame ... 433
        Destroying a Stack Frame in the Epilog ... 434
        Stack Alignment ... 435
        Characters Out Via puts() ... 437
    Formatted Text Output with printf() ... 438
        Passing Parameters to printf() ... 440
        Printf() Needs a Preceding 0 in RAX ... 442
        You Shall Have –No-­Pie ... 442
    Data In with fgets() and scanf() ... 442
        Using scanf() for Entry of Numeric Values ... 445
    Be a Linux Time Lord ... 448
        The C Library’s Time Machine ... 449
        Fetching time_t Values from the System Clock ... 451
        Converting a time_t Value to a Formatted String ... 451
        Generating Separate Local Time Values ... 452
        Making a Copy of glibc’s tm Struct with MOVSD ... 453
    Understanding AT&T Instruction Mnemonics ... 456
        AT&T Mnemonic Conventions ... 457
        AT&T Memory Reference Syntax ... 459
    Generating Random Numbers ... 460
        Seeding the Generator with srand() ... 461
        Generating Pseudorandom Numbers ... 461
        Some Bits Are More Random Than Others ... 467
        Calls to Addresses in Registers ... 469
        Using puts() to Send a Naked Linefeed to the Console ... 470
        How to Pass a libc Function More Than Six Parameters ... 470
    How C Sees Command-­Line Arguments ... 472
        Simple File I/O ... 474
        Converting Strings into Numbers with sscanf() ... 475
        Creating and Opening Files ... 477
        Reading Text from Files with fgets() ... 478
        Writing Text to Files with fprintf() ... 481
        Notes on Gathering Your Procedures into Libraries ... 482

Conclusion: Not the End, But Only the Beginning ... 489

Appendix A
    The Return of the Insight Debugger ... 493
    Insight’s Shortcomings ... 494
    Opening a Program Under Insight ... 495
    Setting Command-­Line Arguments with Insight ... 496
    Running and Stepping a Program ... 496
    The Memory Window ... 497
    Showing the Stack in Insight’s Memory View ... 498
    Examining the Stack with Insight’s Memory View ... 498
    Learn gdb! ... 500

Appendix B
    Partial x64 Instruction Reference ... 501
    What’s Been Removed from x64 ... 502
    Flag Results ... 502
    Size Specifiers ... 503
    Instruction Index ... 505
    ADC: Arithmetic Addition with Carry ... 507
        Flags Affected ... 507
        Legal Forms ... 507
        Examples ... 507
        Notes ... 507
    ADD: Arithmetic Addition ... 509
        Flags Affected ... 509
        Legal Forms ... 509
        Examples ... 509
        Notes ... 509
    AND: Logical AND ... 511
        Flags Affected ... 511
        Legal Forms ... 511
        Examples ... 511
        Notes ... 511
    BT: Bit Test ... 513
        Flags Affected ... 513
        Legal Forms ... 513
        Examples ... 513
        Notes ... 513
    CALL: Call Procedure ... 515
        Flags Affected ... 515
        Legal Forms ... 515
        Examples ... 515
        Notes ... 515
    CLC: Clear Carry Flag (CF) ... 517
        Flags Affected ... 517
        Legal Forms ... 517
        Examples ... 517
        Notes ... 517
    CLD: Clear Direction Flag (DF) ... 518
        Flags Affected ... 518
        Legal Forms ... 518
        Examples ... 518
        Notes ... 518
    CMP: Arithmetic Comparison ... 519
        Flags Affected ... 519
        Legal Forms ... 519
        Examples ... 519
        Notes ... 519
    DEC: Decrement Operand ... 521
        Flags Affected ... 521
        Legal Forms ... 521
        Examples ... 521
        Notes ... 521
    DIV: Unsigned Integer Division ... 522
        Flags Affected ... 522
        Legal Forms ... 522
        Examples ... 522
        Notes ... 522
    INC: Increment Operand ... 524
        Flags Affected ... 524
        Legal Forms ... 524
        Examples ... 524
        Notes ... 524
     J??: Jump If Condition Is Met ... 525
        Flags Affected ... 525
        Examples ... 525
        Notes ... 525
    JECXZ: Jump if ECX=0 ... 257
        Flags Affected ... 527
        Legal Forms ... 527
        Examples ... 527
        Notes ... 527
    JRCXZ: Jump If RCX=0 ... 528
        Flags Affected ... 528
        Legal Forms ... 528
        Examples ... 528
        Notes ... 528
    JMP: Unconditional Jump ... 529
        Flags Affected ... 529
        Legal Forms ... 529
        Examples ... 529
        Notes ... 529
    LEA: Load Effective Address ... 531
        Flags Affected ... 531
        Legal Forms ... 531
        Examples ... 531
        Notes ... 531
    LOOP: Loop Until CX/ECX/RCX=0 ... 532
        Flags Affected ... 532
        Legal Forms ... 532
        Examples ... 532
        Notes ... 532
    LOOPNZ/LOOPNE: Loop Until CX/ECX/RCX=0 and ZF=0 ... 534
        Flags Affected ... 534
        Legal Forms ... 534
        Examples ... 534
        Notes ... 534
    MOV: Copy Right Operand into Left Operand ... 536
        Flags Affected ... 536
        Legal Forms ... 536
        Examples ... 536
        Notes ... 536
    MOVS: Move String ... 538
        Flags Affected ... 538
        Legal Forms ... 538
        Examples ... 538
        Notes ... 538
    MOVSX: Copy with Sign Extension ... 540
        Flags Affected ... 540
        Legal Forms ... 540
        Examples ... 540
        Notes ... 540
    MUL: Unsigned Integer Multiplication ... 542
        Flags Affected ... 542
        Legal Forms ... 542
        Examples ... 542
        Notes ... 542
    NEG: Negate (Two’s Complement; i.e., Multiply by −­1) ... 544
        Flags Affected ... 544
        Legal Forms ... 544
        Examples ... 544
        Notes ... 544
    NOP: No Operation ... 546
        Flags Affected ... 546
        Legal Forms ... 546
        Examples ... 546
        Notes ... 546
    NOT: Logical NOT (One’s Complement) ... 457
        Flags Affected ... 547
        Legal Forms ... 547
        Examples ... 547
        Notes ... 547
    OR: Logical OR ... 548
        Flags Affected ... 548
        Legal Forms ... 548
        Examples ... 548
        Notes ... 548
    POP: Copy Top of Stack into Operand ... 550
        Flags Affected ... 550
        Legal Forms ... 550
        Examples ... 550
        Notes ... 550
    POPF/D/Q: Copy Top of Stack into Flags Register ... 552
        Flags Affected ... 552
        Legal Forms ... 552
        Examples ... 552
        Notes ... 552
    PUSH: Push Operand onto Top of Stack ... 553
        Flags Affected ... 553
        Legal Forms ... 553
        Examples ... 553
        Notes ... 553
    PUSHF/D/Q: Push Flags Onto the Stack ... 555
        Flags Affected ... 555
        Legal Forms ... 555
        Examples ... 555
        Notes ... 555
    RET: Return from Procedure ... 556
        Flags Affected ... 556
        Legal Forms ... 556
        Examples ... 556
        Notes ... 556
    ROL/ROR: Rotate Left/Rotate Right ... 558
        Flags Affected ... 558
        Legal Forms ... 558
        Examples ... 558
        Notes ... 558
    SBB: Arithmetic Subtraction with Borrow ... 560
        Flags Affected ... 560
        Legal Forms ... 560
        Examples ... 560
        Notes ... 560
    SHL/SHR: Shift Left/Shift Right ... 562
        Flags Affected ... 562
        Legal Forms ... 562
        Examples ... 562
        Notes ... 562
    STC: Set Carry Flag (CF) ... 564
        Flags Affected ... 564
        Legal Forms ... 564
        Examples ... 564
        Notes ... 564
    STD: Set Direction Flag (DF) ... 565
        Flags Affected ... 565
        Legal Forms ... 565
        Examples ... 565
        Notes ... 565
    STOS/B/W/D/Q: Store String ... 566
        Flags Affected ... 566
        Legal Forms ... 566
        Examples ... 566
        Notes ... 566
    SUB: Arithmetic Subtraction ... 568
        Flags Affected ... 568
        Legal Forms ... 568
        Examples ... 568
        Notes ... 568
    SYSCALL: Fast System Call into Linux ... 570
        Flags Affected ... 570
        Legal Forms ... 570
        Examples ... 570
        Notes ... 570
    XCHG: Exchange Operands ... 571
        Flags Affected ... 571
        Legal Forms ... 571
        Examples ... 571
        Notes ... 571
    XLAT: Translate Byte Via Table ... 572
        Flags Affected ... 572
        Legal Forms ... 572
        Examples ... 572
        Notes ... 572
    XOR: Exclusive OR ... 573
        Flags Affected ... 573
        Legal Forms ... 573
        Examples ... 573
        Notes ... 573

Appendix C
    Character Set Charts ... 575

Index ... 579

0