Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Assembler » AT&T: Code analysieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.02.2011, 14:33 Uhr
huckleberry



Hallo Leute,

ich habe hier mal eine kleines Progrämmchen geschrieben. Es macht eigentlich nichts sinnvolles, nur ein char Zeiger mit String von Kommandozeile in ein Unterprogramm übergeben, was dann aufegerufen wird.
Hier mal der "objdump -d meinProg" von meinem Programm. Ich nehme mal an, hier sind auch interne systemaufrufe usw. dabei _start, __do_globl_constructors, _frame.... usw.... ??

Ich hatte irgednwie immer im Hinterkopf, Programme fangen in der main an? Aber hier ist es wohl _start, _init, oder so??!


Code:
meinProg:     file format elf64-x86-64

Disassembly of section .init:

0000000000400468 <_init>:
  400468:       48 83 ec 08             sub    $0x8,%rsp
  40046c:       e8 8b 00 00 00          callq  4004fc <call_gmon_start>
  400471:       e8 1a 01 00 00          callq  400590 <frame_dummy>
  400476:       e8 65 02 00 00          callq  4006e0 <__do_global_ctors_aux>
  40047b:       48 83 c4 08             add    $0x8,%rsp
  40047f:       c3                      retq  

Disassembly of section .plt:

0000000000400480 <printf@plt-0x10>:
  400480:       ff 35 6a 0b 20 00       pushq  0x200b6a(%rip)        # 600ff0 <_GLOBAL_OFFSET_TABLE_+0x8>
  400486:       ff 25 6c 0b 20 00       jmpq   *0x200b6c(%rip)        # 600ff8 <_GLOBAL_OFFSET_TABLE_+0x10>
  40048c:       0f 1f 40 00             nopl   0x0(%rax)

0000000000400490 <printf@plt>:
  400490:       ff 25 6a 0b 20 00       jmpq   *0x200b6a(%rip)        # 601000 <_GLOBAL_OFFSET_TABLE_+0x18>
  400496:       68 00 00 00 00          pushq  $0x0
  40049b:       e9 e0 ff ff ff          jmpq   400480 <_init+0x18>

00000000004004a0 <puts@plt>:
  4004a0:       ff 25 62 0b 20 00       jmpq   *0x200b62(%rip)        # 601008 <_GLOBAL_OFFSET_TABLE_+0x20>
  4004a6:       68 01 00 00 00          pushq  $0x1
  4004ab:       e9 d0 ff ff ff          jmpq   400480 <_init+0x18>

00000000004004b0 <__libc_start_main@plt>:
  4004b0:       ff 25 5a 0b 20 00       jmpq   *0x200b5a(%rip)        # 601010 <_GLOBAL_OFFSET_TABLE_+0x28>
  4004b6:       68 02 00 00 00          pushq  $0x2
  4004bb:       e9 c0 ff ff ff          jmpq   400480 <_init+0x18>

00000000004004c0 <strcpy@plt>:
  4004c0:       ff 25 52 0b 20 00       jmpq   *0x200b52(%rip)        # 601018 <_GLOBAL_OFFSET_TABLE_+0x30>
  4004c6:       68 03 00 00 00          pushq  $0x3
  4004cb:       e9 b0 ff ff ff          jmpq   400480 <_init+0x18>

Disassembly of section .text:

00000000004004d0 <_start>:
  4004d0:       31 ed                   xor    %ebp,%ebp
  4004d2:       49 89 d1                mov    %rdx,%r9
  4004d5:       5e                      pop    %rsi
  4004d6:       48 89 e2                mov    %rsp,%rdx
  4004d9:       48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
  4004dd:       50                      push   %rax
  4004de:       54                      push   %rsp
  4004df:       49 c7 c0 d0 06 40 00    mov    $0x4006d0,%r8
  4004e6:       48 c7 c1 40 06 40 00    mov    $0x400640,%rcx
  4004ed:       48 c7 c7 de 05 40 00    mov    $0x4005de,%rdi
  4004f4:       e8 b7 ff ff ff          callq  4004b0 <__libc_start_main@plt>
  4004f9:       f4                      hlt    
  4004fa:       90                      nop
  4004fb:       90                      nop

00000000004004fc <call_gmon_start>:
  4004fc:       48 83 ec 08             sub    $0x8,%rsp
  400500:       48 8b 05 d9 0a 20 00    mov    0x200ad9(%rip),%rax        # 600fe0 <_DYNAMIC+0x1a0>
  400507:       48 85 c0                test   %rax,%rax
  40050a:       74 02                   je     40050e <call_gmon_start+0x12>
  40050c:       ff d0                   callq  *%rax
  40050e:       48 83 c4 08             add    $0x8,%rsp
  400512:       c3                      retq  
  400513:       90                      nop
  400514:       90                      nop
  400515:       90                      nop
  400516:       90                      nop
  400517:       90                      nop
  400518:       90                      nop
  400519:       90                      nop
  40051a:       90                      nop
  40051b:       90                      nop
  40051c:       90                      nop
  40051d:       90                      nop
  40051e:       90                      nop
  40051f:       90                      nop

0000000000400520 <__do_global_dtors_aux>:
  400520:       55                      push   %rbp
  400521:       48 89 e5                mov    %rsp,%rbp
  400524:       53                      push   %rbx
  400525:       48 83 ec 08             sub    $0x8,%rsp
  400529:       80 3d 00 0b 20 00 00    cmpb   $0x0,0x200b00(%rip)        # 601030 <__bss_start>
  400530:       75 4b                   jne    40057d <__do_global_dtors_aux+0x5d>
  400532:       bb 30 0e 60 00          mov    $0x600e30,%ebx
  400537:       48 8b 05 fa 0a 20 00    mov    0x200afa(%rip),%rax        # 601038 <dtor_idx.5943>
  40053e:       48 81 eb 28 0e 60 00    sub    $0x600e28,%rbx
  400545:       48 c1 fb 03             sar    $0x3,%rbx
  400549:       48 83 eb 01             sub    $0x1,%rbx
  40054d:       48 39 d8                cmp    %rbx,%rax
  400550:       73 24                   jae    400576 <__do_global_dtors_aux+0x56>
  400552:       eb 04                   jmp    400558 <__do_global_dtors_aux+0x38>
  400554:       90                      nop
  400555:       90                      nop
  400556:       90                      nop
  400557:       90                      nop
  400558:       48 83 c0 01             add    $0x1,%rax
  40055c:       48 89 05 d5 0a 20 00    mov    %rax,0x200ad5(%rip)        # 601038 <dtor_idx.5943>
  400563:       ff 14 c5 28 0e 60 00    callq  *0x600e28(,%rax,8)
  40056a:       48 8b 05 c7 0a 20 00    mov    0x200ac7(%rip),%rax        # 601038 <dtor_idx.5943>
  400571:       48 39 d8                cmp    %rbx,%rax
  400574:       72 e2                   jb     400558 <__do_global_dtors_aux+0x38>
  400576:       c6 05 b3 0a 20 00 01    movb   $0x1,0x200ab3(%rip)        # 601030 <__bss_start>
  40057d:       48 83 c4 08             add    $0x8,%rsp
  400581:       5b                      pop    %rbx
  400582:       c9                      leaveq
  400583:       c3                      retq  
  400584:       eb 0a                   jmp    400590 <frame_dummy>
  400586:       90                      nop
  400587:       90                      nop
  400588:       90                      nop
  400589:       90                      nop
  40058a:       90                      nop
  40058b:       90                      nop
  40058c:       90                      nop
  40058d:       90                      nop
  40058e:       90                      nop
  40058f:       90                      nop

0000000000400590 <frame_dummy>:
  400590:       48 83 3d a0 08 20 00    cmpq   $0x0,0x2008a0(%rip)        # 600e38 <__JCR_END__>
  400597:       00
  400598:       55                      push   %rbp
  400599:       48 89 e5                mov    %rsp,%rbp
  40059c:       74 12                   je     4005b0 <frame_dummy+0x20>
  40059e:       b8 00 00 00 00          mov    $0x0,%eax
  4005a3:       48 85 c0                test   %rax,%rax
  4005a6:       74 08                   je     4005b0 <frame_dummy+0x20>
  4005a8:       bf 38 0e 60 00          mov    $0x600e38,%edi
  4005ad:       c9                      leaveq
  4005ae:       ff e0                   jmpq   *%rax
  4005b0:       c9                      leaveq
  4005b1:       c3                      retq  
  4005b2:       90                      nop
  4005b3:       90                      nop


--
There are 10 types, those who understand binary and those who don't...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.02.2011, 14:33 Uhr
huckleberry



Hier gehts weiter

Code:
00000000004005b4 <subfunk>:
  4005b4:       55                      push   %rbp
  4005b5:       48 89 e5                mov    %rsp,%rbp
  4005b8:       48 83 ec 30             sub    $0x30,%rsp
  4005bc:       48 89 7d d8             mov    %rdi,-0x28(%rbp)
  4005c0:       8b 05 66 01 00 00       mov    0x166(%rip),%eax        # 40072c <_IO_stdin_used+0x4>
  4005c6:       89 45 e0                mov    %eax,-0x20(%rbp)
  4005c9:       48 8b 55 d8             mov    -0x28(%rbp),%rdx
  4005cd:       48 8d 45 f0             lea    -0x10(%rbp),%rax
  4005d1:       48 89 d6                mov    %rdx,%rsi
  4005d4:       48 89 c7                mov    %rax,%rdi
  4005d7:       e8 e4 fe ff ff          callq  4004c0 <strcpy@plt>
  4005dc:       c9                      leaveq
  4005dd:       c3                      retq  

00000000004005de <main>:
  4005de:       55                      push   %rbp
  4005df:       48 89 e5                mov    %rsp,%rbp
  4005e2:       48 83 ec 10             sub    $0x10,%rsp
  4005e6:       89 7d fc                mov    %edi,-0x4(%rbp)
  4005e9:       48 89 75 f0             mov    %rsi,-0x10(%rbp)
  4005ed:       b8 30 07 40 00          mov    $0x400730,%eax
  4005f2:       48 89 c7                mov    %rax,%rdi
  4005f5:       b8 00 00 00 00          mov    $0x0,%eax
  4005fa:       e8 91 fe ff ff          callq  400490 <printf@plt>
  4005ff:       83 7d fc 01             cmpl   $0x1,-0x4(%rbp)
  400603:       7e 28                   jle    40062d <main+0x4f>
  400605:       48 8b 45 f0             mov    -0x10(%rbp),%rax
  400609:       48 83 c0 08             add    $0x8,%rax
  40060d:       48 8b 00                mov    (%rax),%rax
  400610:       48 89 c7                mov    %rax,%rdi
  400613:       e8 9c ff ff ff          callq  4005b4 <subfunk>
  400618:       48 8b 45 f0             mov    -0x10(%rbp),%rax
  40061c:       48 83 c0 08             add    $0x8,%rax
  400620:       48 8b 00                mov    (%rax),%rax
  400623:       48 89 c7                mov    %rax,%rdi
  400626:       e8 75 fe ff ff          callq  4004a0 <puts@plt>
  40062b:       eb 0a                   jmp    400637 <main+0x59>
  40062d:       bf 3a 07 40 00          mov    $0x40073a,%edi
  400632:       e8 69 fe ff ff          callq  4004a0 <puts@plt>
  400637:       c9                      leaveq
  400638:       c3                      retq  
  400639:       90                      nop
  40063a:       90                      nop
  40063b:       90                      nop
  40063c:       90                      nop
  40063d:       90                      nop
  40063e:       90                      nop
  40063f:       90                      nop

0000000000400640 <__libc_csu_init>:
  400640:       48 89 6c 24 d8          mov    %rbp,-0x28(%rsp)
  400645:       4c 89 64 24 e0          mov    %r12,-0x20(%rsp)
  40064a:       48 8d 2d c3 07 20 00    lea    0x2007c3(%rip),%rbp        # 600e14 <__init_array_end>
  400651:       4c 8d 25 bc 07 20 00    lea    0x2007bc(%rip),%r12        # 600e14 <__init_array_end>
  400658:       4c 89 6c 24 e8          mov    %r13,-0x18(%rsp)
  40065d:       4c 89 74 24 f0          mov    %r14,-0x10(%rsp)
  400662:       4c 89 7c 24 f8          mov    %r15,-0x8(%rsp)
  400667:       48 89 5c 24 d0          mov    %rbx,-0x30(%rsp)
  40066c:       48 83 ec 38             sub    $0x38,%rsp
  400670:       4c 29 e5                sub    %r12,%rbp
  400673:       41 89 fd                mov    %edi,%r13d
  400676:       49 89 f6                mov    %rsi,%r14
  400679:       48 c1 fd 03             sar    $0x3,%rbp
  40067d:       49 89 d7                mov    %rdx,%r15
  400680:       e8 e3 fd ff ff          callq  400468 <_init>
  400685:       48 85 ed                test   %rbp,%rbp
  400688:       74 1c                   je     4006a6 <__libc_csu_init+0x66>
  40068a:       31 db                   xor    %ebx,%ebx
  40068c:       eb 02                   jmp    400690 <__libc_csu_init+0x50>
  40068e:       90                      nop
  40068f:       90                      nop
  400690:       4c 89 fa                mov    %r15,%rdx
  400693:       4c 89 f6                mov    %r14,%rsi
  400696:       44 89 ef                mov    %r13d,%edi
  400699:       41 ff 14 dc             callq  *(%r12,%rbx,8)
  40069d:       48 83 c3 01             add    $0x1,%rbx
  4006a1:       48 39 eb                cmp    %rbp,%rbx
  4006a4:       72 ea                   jb     400690 <__libc_csu_init+0x50>
  4006a6:       48 8b 5c 24 08          mov    0x8(%rsp),%rbx
  4006ab:       48 8b 6c 24 10          mov    0x10(%rsp),%rbp
  4006b0:       4c 8b 64 24 18          mov    0x18(%rsp),%r12
  4006b5:       4c 8b 6c 24 20          mov    0x20(%rsp),%r13
  4006ba:       4c 8b 74 24 28          mov    0x28(%rsp),%r14
  4006bf:       4c 8b 7c 24 30          mov    0x30(%rsp),%r15
  4006c4:       48 83 c4 38             add    $0x38,%rsp
  4006c8:       c3                      retq  
  4006c9:       eb 05                   jmp    4006d0 <__libc_csu_fini>
  4006cb:       90                      nop
  4006cc:       90                      nop
  4006cd:       90                      nop
  4006ce:       90                      nop
  4006cf:       90                      nop

00000000004006d0 <__libc_csu_fini>:
  4006d0:       f3 c3                   repz retq
  4006d2:       90                      nop
  4006d3:       90                      nop
  4006d4:       90                      nop
  4006d5:       90                      nop
  4006d6:       90                      nop
  4006d7:       90                      nop
  4006d8:       90                      nop
  4006d9:       90                      nop
  4006da:       90                      nop
  4006db:       90                      nop
  4006dc:       90                      nop
  4006dd:       90                      nop
  4006de:       90                      nop
  4006df:       90                      nop

00000000004006e0 <__do_global_ctors_aux>:
  4006e0:       55                      push   %rbp
  4006e1:       48 89 e5                mov    %rsp,%rbp
  4006e4:       53                      push   %rbx
  4006e5:       48 83 ec 08             sub    $0x8,%rsp
  4006e9:       48 8b 05 28 07 20 00    mov    0x200728(%rip),%rax        # 600e18 <__CTOR_LIST__>
  4006f0:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  4006f4:       74 19                   je     40070f <__do_global_ctors_aux+0x2f>
  4006f6:       bb 18 0e 60 00          mov    $0x600e18,%ebx
  4006fb:       eb 03                   jmp    400700 <__do_global_ctors_aux+0x20>
  4006fd:       90                      nop
  4006fe:       90                      nop
  4006ff:       90                      nop
  400700:       48 83 eb 08             sub    $0x8,%rbx
  400704:       ff d0                   callq  *%rax
  400706:       48 8b 03                mov    (%rbx),%rax
  400709:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  40070d:       75 f1                   jne    400700 <__do_global_ctors_aux+0x20>
  40070f:       48 83 c4 08             add    $0x8,%rsp
  400713:       5b                      pop    %rbx
  400714:       c9                      leaveq
  400715:       c3                      retq  
  400716:       90                      nop
  400717:       90                      nop

Disassembly of section .fini:

0000000000400718 <_fini>:
  400718:       48 83 ec 08             sub    $0x8,%rsp
  40071c:       e8 ff fd ff ff          callq  400520 <__do_global_dtors_aux>
  400721:       48 83 c4 08             add    $0x8,%rsp
  400725:       c3                      retq


--
There are 10 types, those who understand binary and those who don't...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.02.2011, 14:38 Uhr
huckleberry



Wenn es nicht stört würde ich das hier mit Interessenten diskutieren.
Also hab herausgefunden

Code:
asmtutorial $ readelf -h meinProg | grep Entry
  Entry point address:               0x4004d0


An der Adresse steht ja laut dump oben mein _start. Also dort fange ich dann an, wenn das Programm gestartet wird. Einwände?

Dann kommen mir nun 2 weitere Fragen auf zum Kontext in <_start>:
1. gleich als erstes steht:

Code:
xor %ebp,%ebp



Der ExtednedBasePointer wird auf 0 geresettet? Ergibt doch kein Sinn, da 2 Zeilen weiter mit

Code:
pop %rsi


Der Inhalt oben vom Stack (undzwar von %rsp und nicht ebp (==rbp)) in der %rsi Register gesichert wird.
2. Wo soll denn bitteschön die Stackspitze sein? %rsp ist doch noch nirgends iitialisiert worden?

_start sieht mir nach einem Wrapper für __libc_start_main aus?

Code:
  4004f4:       e8 b7 ff ff ff          callq  4004b0 <__libc_start_main@plt>


--
There are 10 types, those who understand binary and those who don't...

Dieser Post wurde am 06.02.2011 um 14:56 Uhr von huckleberry editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.02.2011, 02:56 Uhr
Hans
Library Walker
(Operator)


Hi,


Zitat von huckleberry:

Ich hatte irgednwie immer im Hinterkopf, Programme fangen in der main an?


im Prinzip ja, aber es gibt da auch noch den sogenannten Startcode, den der Linker noch einbindet. Darin wird dann u.a. der Stack initialisiert, der Heap eingerichtet, und noch so ein paar Sachen. Wenn diese Initialisierungen abgeschlossen sind, dann wird main() aufgerufen.
Hier hab ich mal einen Startcode von einem Borlandcompiler gefunden, der zwar nicht mehr ganz up to date ist, aber das Prinzip und die Funktion sollte klar werden. Das ist unter Windows oder Linux "nur" umfangreicher...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 07.02.2011 um 02:59 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.02.2011, 18:08 Uhr
huckleberry




Zitat von Hans:
Hier hab ich ...


Dangeschee, werds die Tage studieren..
--
There are 10 types, those who understand binary and those who don't...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Assembler ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: