Используя GCC для создания читаемого блока?

grep -q полезно с этой целью.

то же использование awk:

string="unix-bash 2389"
character="@"
printf '%s' "$string" | awk -vc="$character" '{ if (gsub(c, "")) { print "Found" } else { print "Not Found" } }'

Вывод:

Не Найденный

string="unix-bash 2389"
character="-"
printf '%s' "$string" | awk -vc="$character" '{ if (gsub(c, "")) { print "Found" } else { print "Not Found" } }'

Вывод:

Найденный

Первоисточник: http://unstableme.blogspot.com/2008/06/bash-search-letter-in-string-awk.html

238
задан Ryan Tenney 30 April 2012 в 17:13
поделиться

6 ответов

В Windows мы использовали Apache для обслуживания наших файлов. Здесь Мы очень довольны такой настройкой.

> gcc -g -c test.c
> objdump -d -M intel -S test.o

test.o:     file format elf32-i386


Disassembly of section .text:

00000000 <main>:
#include <stdio.h>

int main(void)
{
   0:   55                      push   ebp
   1:   89 e5                   mov    ebp,esp
   3:   83 e4 f0                and    esp,0xfffffff0
   6:   83 ec 10                sub    esp,0x10
    puts("test");
   9:   c7 04 24 00 00 00 00    mov    DWORD PTR [esp],0x0
  10:   e8 fc ff ff ff          call   11 <main+0x11>

    return 0;
  15:   b8 00 00 00 00          mov    eax,0x0
}
  1a:   c9                      leave  
  1b:   c3                      ret
320
ответ дан 23 November 2019 в 03:21
поделиться

Использование -S переключение на GCC в системах на базе x86 по умолчанию создает дамп синтаксиса AT&T, который можно указать с помощью переключателя -masm = att , например:

gcc -S -masm=att code.c

Если вы хотите создать дамп в синтаксисе Intel, вы можете используйте переключатель -masm = intel , например так:

gcc -S -masm=intel code.c

(Оба создают дампы code.c с различным синтаксисом, в файл code.s ] соответственно)

Чтобы получить аналогичные эффекты с помощью objdump, вам нужно использовать переключатель - disassembler-options = intel / att , пример (с дампами кода для иллюстрации различий в синтаксисе):

 $ objdump -d --disassembler-options=att code.c
 080483c4 <main>:
 80483c4:   8d 4c 24 04             lea    0x4(%esp),%ecx
 80483c8:   83 e4 f0                and    $0xfffffff0,%esp
 80483cb:   ff 71 fc                pushl  -0x4(%ecx)
 80483ce:   55                      push   %ebp
 80483cf:   89 e5                   mov    %esp,%ebp
 80483d1:   51                      push   %ecx
 80483d2:   83 ec 04                sub    $0x4,%esp
 80483d5:   c7 04 24 b0 84 04 08    movl   $0x80484b0,(%esp)
 80483dc:   e8 13 ff ff ff          call   80482f4 <puts@plt>
 80483e1:   b8 00 00 00 00          mov    $0x0,%eax
 80483e6:   83 c4 04                add    $0x4,%esp 
 80483e9:   59                      pop    %ecx
 80483ea:   5d                      pop    %ebp
 80483eb:   8d 61 fc                lea    -0x4(%ecx),%esp
 80483ee:   c3                      ret
 80483ef:   90                      nop

и

$ objdump -d --disassembler-options=intel code.c
 080483c4 <main>:
 80483c4:   8d 4c 24 04             lea    ecx,[esp+0x4]
 80483c8:   83 e4 f0                and    esp,0xfffffff0
 80483cb:   ff 71 fc                push   DWORD PTR [ecx-0x4]
 80483ce:   55                      push   ebp
 80483cf:   89 e5                   mov    ebp,esp
 80483d1:   51                      push   ecx
 80483d2:   83 ec 04                sub    esp,0x4
 80483d5:   c7 04 24 b0 84 04 08    mov    DWORD PTR [esp],0x80484b0
 80483dc:   e8 13 ff ff ff          call   80482f4 <puts@plt>
 80483e1:   b8 00 00 00 00          mov    eax,0x0
 80483e6:   83 c4 04                add    esp,0x4
 80483e9:   59                      pop    ecx
 80483ea:   5d                      pop    ebp
 80483eb:   8d 61 fc                lea    esp,[ecx-0x4]
 80483ee:   c3                      ret    
 80483ef:   90                      nop
49
ответ дан 23 November 2019 в 03:21
поделиться

Используйте переключатель -S (примечание: заглавная S) для GCC, и он передаст ассемблерный код в файл с расширением .s. Например, следующая команда:

gcc -O2 -S foo.c

оставит сгенерированный код сборки в файле foo.s.

Копируется прямо из http: //www.delorie .com / djgpp / v2faq / faq8_20.html (но удаление ошибочного -c )

74
ответ дан 23 November 2019 в 03:21
поделиться

Я хотел бы добавить к этим ответам, что если вы укажете gcc флаг -fverbose-asm , ассемблер, который он генерирует, будет намного понятнее для чтения.

97
ответ дан 23 November 2019 в 03:21
поделиться

Вы можете использовать gdb для этого, как objdump.

Этот отрывок взят из http://sources.redhat.com/gdb/current/onlinedocs/gdb_9.html#SEC64


Вот пример, показывающий смешанный исходный код + сборку для Intel x86:

  (gdb) disas /m main
Dump of assembler code for function main:
5       {
0x08048330 :    push   %ebp
0x08048331 :    mov    %esp,%ebp
0x08048333 :    sub    $0x8,%esp
0x08048336 :    and    $0xfffffff0,%esp
0x08048339 :    sub    $0x10,%esp

6         printf ("Hello.\n");
0x0804833c :   movl   $0x8048440,(%esp)
0x08048343 :   call   0x8048284 

7         return 0;
8       }
0x08048348 :   mov    $0x0,%eax
0x0804834d :   leave
0x0804834e :   ret

End of assembler dump.
19
ответ дан 23 November 2019 в 03:21
поделиться

Используйте переключатель -S (примечание: заглавная S) для GCC, и он передаст ассемблерный код в файл с расширением .s. Например, следующая команда:

gcc -O2 -S -c foo.c

13
ответ дан 23 November 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: