Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Leonid Kudryavtsev

Код, это просто byte[].
Ассемблер просто инструкцию в byte преобразовывает. Выделить память, заполнить кодом, поставить признак executable... запустить... словить GPF error )))

Я здесь почти согласен. Но я хотел-бы чтоб java разработчик получил не JIT а конкретный артифакт.
Физический файл. Который можно использовать в других проектах. Например в С++.

Коньюнктурный интерес.
22 ноя 20, 20:03    [22236673]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Вот спека на этого Эльфа https://formats.kaitai.io/elf/index.html

Щас попробуем нагенерить.
22 ноя 20, 20:19    [22236690]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Хм.. тут какая-то ошибка.

        instances:
          body:
            io: _root._io
            pos: ofs_body
            size: len_body
            type:
              switch-on: type
              cases:
                'sh_type::dynamic': dynamic_section
                'sh_type::strtab': strings_struct
                'sh_type::dynsym': dynsym_section
                'sh_type::dynstr': strings_struct
          name:
            io: _root.header.strings._io


Этот кейс ссылается на константу или Enum которого нет.

                            case DYNSYM: {
                                this._raw_body = io.readBytes(lenBody());
                                KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
                                this.body = new DynsymSection(_io__raw_body, this, _root, _is_le);
                                break;
                            }
                            case DYNSTR: {
                                this._raw_body = io.readBytes(lenBody());
                                KaitaiStream _io__raw_body = new ByteBufferKaitaiStream(_raw_body);
                                this.body = new StringsStruct(_io__raw_body, this, _root, _is_le);
                                break;
                            }
                            default: {
                                this.body = io.readBytes(lenBody());
                                break;
                            }


Я пока его хирургически выпилю. А потом разберусь. Что-б хоть компилляция прошла.
22 ноя 20, 20:25    [22236693]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
По поводу 32-64 бит. Я ошибался.

Все 99% моих локальных бинарей распарсились. Ну по крайней мере верхний уровень
этого AST отработал норм. Изредка попадаются исключения но я думаю это minor.

9:38:40.966 [main] INFO mayton.tinyasm.Main - :: bits = B64, osAbi = SYSTEM_V, endian = LE
19:38:40.966 [main] INFO mayton.tinyasm.Main - /usr/lib/x86_64-linux-gnu libgmpxx.so
19:38:40.966 [main] INFO mayton.tinyasm.Main - :: bits = B64, osAbi = SYSTEM_V, endian = LE
19:38:40.966 [main] INFO mayton.tinyasm.Main - /usr/lib/x86_64-linux-gnu libboost_thread.so
19:38:40.966 [main] INFO mayton.tinyasm.Main - :: bits = B64, osAbi = GNU, endian = LE
19:38:40.966 [main] INFO mayton.tinyasm.Main - /usr/lib/x86_64-linux-gnu libm.so
19:38:40.966 [main] ERROR mayton.tinyasm.Main - Unable to parse /usr/lib/x86_64-linux-gnu/libm.so
io.kaitai.struct.KaitaiStream$ValidationNotEqualError: /seq/0: at pos 4: validation failed: not equal, expected [7f 45 4c 46], but got [2f 2a 20 47]
	at mayton.kaitai.Elf._read(Elf.java:318)
	at mayton.kaitai.Elf.<init>(Elf.java:313)
	at mayton.kaitai.Elf.<init>(Elf.java:302)
	at mayton.kaitai.Elf.fromFile(Elf.java:21)
	at mayton.tinyasm.Main.parseElf(Main.java:22)
	at mayton.tinyasm.Main$1.visitFile(Main.java:39)
	at mayton.tinyasm.Main$1.visitFile(Main.java:31)
	at java.base/java.nio.file.Files.walkFileTree(Files.java:2724)
	at java.base/java.nio.file.Files.walkFileTree(Files.java:2796)
	at mayton.tinyasm.Main.main(Main.java:31)
19:38:40.967 [main] INFO mayton.tinyasm.Main - /usr/lib/x86_64-linux-gnu libreadline.so
19:38:40.967 [main] INFO mayton.tinyasm.Main - :: bits = B64, osAbi = SYSTEM_V, endian = LE
19:38:40.967 [main] INFO mayton.tinyasm.Main - /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules config_gnome3.so
19:38:40.967 [main] INFO mayton.tinyasm.Main - :: bits = B64, osAbi = SYSTEM_V, endian = LE


Сообщение было отредактировано: 22 ноя 20, 20:35
22 ноя 20, 20:40    [22236717]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Тулза.

+

  static Logger logger = LoggerFactory.getLogger(Main.class);

    public static void parseElf(Path path) throws IOException {
        String fileName = path.getParent().toString() + "/" + path.getFileName().toString();
        Elf elf = Elf.fromFile(fileName);
        logger.info(":: bits = {}, osAbi = {}, endian = {}", elf.bits(), elf.abi(), elf.endian());
    }

    static Pattern pattern = Pattern.compile(".+\\.(so|axf|o|prx|exe)$", Pattern.CASE_INSENSITIVE);

    public static void main(String[] args) throws IOException {

        Path start = Path.of("/usr");
        Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                String name = file.getFileName().toString();
                String parent = file.getParent().toString();
                if (pattern.matcher(name).matches()) {
                    logger.info("{} {}", parent, name);
                    try {
                        parseElf(file);
                    } catch (Exception ex) {
                        logger.error("Unable to parse " + file, ex);
                    }
                }
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                return FileVisitResult.SKIP_SUBTREE;
            }

        });


    }

22 ноя 20, 20:42    [22236720]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
А теперь парсеры. Для крестов.

К сообщению приложен файл (elf.zip - 11Kb) cкачать
22 ноя 20, 20:48    [22236723]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Для Шарпов.

К сообщению приложен файл (elf-csharp.zip - 9Kb) cкачать
22 ноя 20, 20:49    [22236724]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Для счастливых обладателей java

К сообщению приложен файл (elf-java.zip - 8Kb) cкачать
22 ноя 20, 20:51    [22236726]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Нужен С++ бинарь. Некий софистический пример чтоб его скомпилить. Потом прогнать через этот ElfReader
а потом сравнить с тулами которые выдают дизассемблинг, дамп структур и прочее внутренние ресурсы.

Возму для примера расчет дробей. Наименьшее кратное и так далее.
Для простоты буду собирать не екзешник а либу.

#include "gcd-lcm.h"

int gcd(int a, int b) {
  if (b != 0)
    return gcd(b, a % b);
  else
    return a;
}

int lcm(int a,int b) {
  return (a * b) / gcd(a,b);
}


#ifndef GCD_LCM
#define GCD_LCM

extern int gcd(int a, int b);

extern int lcm(int a,int b);

#endif
23 ноя 20, 00:30    [22236847]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Собираем как либу + экзешник чтоб просто проверить что все ОК.

#!/bin/bash -v

gcc -c -Wall -Werror -fpic gcd-lcm.c
gcc -shared -o libgcd-lcm.so gcd-lcm.o
gcc main.c -o main.exe -lgcd-lcm -L.

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
./main.exe
23 ноя 20, 00:32    [22236848]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Тулзу я расширил. Теперь она выдает в текстовый файл кучу сведений с отступами.
Типа чем правее отступ - тем внутренЕЕ лежит структура. Наподобие ЯМЛ. Чтоб читабельно было.

+
public static void parseElf(Path path) throws IOException {
        String fileName = path.getParent().toString() + "/" + path.getFileName().toString();
        Elf elf = Elf.fromFile(fileName);
        logger.info("elf :");
        logger.info(" file : '{}', magic : {}, bits : {}, osAbi : {}, endian : {}, aviVersion : {}",
                fileName,
                formatByteArray(elf.magic()),
                elf.bits(),
                elf.abi(),
                elf.endian(),
                elf.abiVersion());

        Elf.EndianElf header = elf.header();
        if (header != null) {
            logger.info("  header:");
            logger.info("     machine  : {}", header.machine());
            logger.info("     etype    : {}", header.eType());
            logger.info("     flags    : {}", formatByteArray(header.flags()));
            logger.info("     eEhsize  : {}", header.eEhsize());
            logger.info("     pheaders :");

            ArrayList<Elf.EndianElf.ProgramHeader> pheaders = header.programHeaders();
            for(Elf.EndianElf.ProgramHeader pheader : pheaders) {
                logger.info("      - offset  : {}", pheader.offset());
                logger.info("        type    : {}", pheader.type());
                logger.info("        memsz   : {}", pheader.memsz());
                logger.info("        filesz  : {}", pheader.filesz());
                logger.info("        align   : {}", pheader.align());
                logger.info("        flags32 : {}", pheader.flags32());
                logger.info("        flags64 : {}", pheader.flags64());
                /*
                Elf.PhdrTypeFlags fo = pheader.flagsObj();
                if (fo != null) {
                    logger.info("        PhdrTypeFlags : { ex : {}, mp : {}, r : {}, w : {} }", fo.execute(), fo.maskProc(), fo.read(), fo.value(), fo.write());
                }*/

                if (pheader.dynamic() != null) {
                    Elf.EndianElf.DynamicSection ds = pheader.dynamic();
                    logger.info("        dynamicSection : ");
                    for(Elf.EndianElf.DynamicSectionEntry entry : ds.entries()) {
                        logger.info("          - flag1Values : {}", entry.flag1Values());
                        logger.info("            valueOrPtr  : {}", entry.valueOrPtr());
                        logger.info("            tag         : {}", entry.tag());
                        logger.info("            tagEnum     : {}", entry.tagEnum());
                    }
                }
            }
        }
    }
23 ноя 20, 00:34    [22236851]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Модератор. Я был неправ и уже залез в C++/Java и ассемблер. Поэтому прошу мувнуть это в Программинг. Спс.
23 ноя 20, 00:35    [22236854]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Вот что выдает этот парсер Эльфов при парсинге библиотечки libgcd-lcm.so

+
elf :
 file : 'c/libgcd-lcm.so', magic : 7F 45 4C 46 , bits : B64, osAbi : SYSTEM_V, endian : LE, aviVersion : 0
  header:
     machine  : X86_64
     etype    : SHARED
     flags    : 00 00 00 00 
     eEhsize  : 64
     pheaders :
      - offset  : 0
        type    : LOAD
        memsz   : 1248
        filesz  : 1248
        align   : 4096
        flags32 : null
        flags64 : 4
      - offset  : 4096
        type    : LOAD
        memsz   : 401
        filesz  : 401
        align   : 4096
        flags32 : null
        flags64 : 5
      - offset  : 8192
        type    : LOAD
        memsz   : 236
        filesz  : 236
        align   : 4096
        flags32 : null
        flags64 : 4
      - offset  : 11856
        type    : LOAD
        memsz   : 480
        filesz  : 472
        align   : 4096
        flags32 : null
        flags64 : 6
      - offset  : 11872
        type    : DYNAMIC
        memsz   : 384
        filesz  : 384
        align   : 8
        flags32 : null
        flags64 : 6
        dynamicSection : 
          - flag1Values : null
            valueOrPtr  : 4096
            tag         : 12
            tagEnum     : INIT
          - flag1Values : null
            valueOrPtr  : 4484
            tag         : 13
            tagEnum     : FINI
          - flag1Values : null
            valueOrPtr  : 15952
            tag         : 25
            tagEnum     : INIT_ARRAY
          - flag1Values : null
            valueOrPtr  : 8
            tag         : 27
            tagEnum     : INIT_ARRAYSZ
          - flag1Values : null
            valueOrPtr  : 15960
            tag         : 26
            tagEnum     : FINI_ARRAY
          - flag1Values : null
            valueOrPtr  : 8
            tag         : 28
            tagEnum     : FINI_ARRAYSZ
          - flag1Values : null
            valueOrPtr  : 752
            tag         : 1879047925
            tagEnum     : GNU_HASH
          - flag1Values : null
            valueOrPtr  : 960
            tag         : 5
            tagEnum     : STRTAB
          - flag1Values : null
            valueOrPtr  : 792
            tag         : 6
            tagEnum     : SYMTAB
          - flag1Values : null
            valueOrPtr  : 93
            tag         : 10
            tagEnum     : STRSZ
          - flag1Values : null
            valueOrPtr  : 24
            tag         : 11
            tagEnum     : SYMENT
          - flag1Values : null
            valueOrPtr  : 16384
            tag         : 3
            tagEnum     : PLTGOT
          - flag1Values : null
            valueOrPtr  : 24
            tag         : 2
            tagEnum     : PLTRELSZ
          - flag1Values : null
            valueOrPtr  : 7
            tag         : 20
            tagEnum     : PLTREL
          - flag1Values : null
            valueOrPtr  : 1224
            tag         : 23
            tagEnum     : JMPREL
          - flag1Values : null
            valueOrPtr  : 1056
            tag         : 7
            tagEnum     : RELA
          - flag1Values : null
            valueOrPtr  : 168
            tag         : 8
            tagEnum     : RELASZ
          - flag1Values : null
            valueOrPtr  : 24
            tag         : 9
            tagEnum     : RELAENT
          - flag1Values : null
            valueOrPtr  : 3
            tag         : 1879048185
            tagEnum     : RELACOUNT
          - flag1Values : null
            valueOrPtr  : 0
            tag         : 0
            tagEnum     : NULL
          - flag1Values : null
            valueOrPtr  : 0
            tag         : 0
            tagEnum     : NULL
          - flag1Values : null
            valueOrPtr  : 0
            tag         : 0
            tagEnum     : NULL
          - flag1Values : null
            valueOrPtr  : 0
            tag         : 0
            tagEnum     : NULL
          - flag1Values : null
            valueOrPtr  : 0
            tag         : 0
            tagEnum     : NULL
      - offset  : 680
        type    : NOTE
        memsz   : 32
        filesz  : 32
        align   : 8
        flags32 : null
        flags64 : 4
      - offset  : 712
        type    : NOTE
        memsz   : 36
        filesz  : 36
        align   : 4
        flags32 : null
        flags64 : 4
      - offset  : 680
        type    : null
        memsz   : 32
        filesz  : 32
        align   : 8
        flags32 : null
        flags64 : 4
      - offset  : 8192
        type    : GNU_EH_FRAME
        memsz   : 52
        filesz  : 52
        align   : 4
        flags32 : null
        flags64 : 4
      - offset  : 0
        type    : GNU_STACK
        memsz   : 0
        filesz  : 0
        align   : 16
        flags32 : null
        flags64 : 6
      - offset  : 11856
        type    : GNU_RELRO
        memsz   : 432
        filesz  : 432
        align   : 1
        flags32 : null
        flags64 : 4
23 ноя 20, 00:38    [22236858]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Вид бинаря с точки зрения дизассемблера.
+


libgcd-lcm.so:     file format elf64-x86-64


Disassembly of section .init:

0000000000001000 <_init>:
    1000:	f3 0f 1e fa          	endbr64 
    1004:	48 83 ec 08          	sub    $0x8,%rsp
    1008:	48 8b 05 e9 2f 00 00 	mov    0x2fe9(%rip),%rax        # 3ff8 <__gmon_start__>
    100f:	48 85 c0             	test   %rax,%rax
    1012:	74 02                	je     1016 <_init+0x16>
    1014:	ff d0                	callq  *%rax
    1016:	48 83 c4 08          	add    $0x8,%rsp
    101a:	c3                   	retq   

Disassembly of section .plt:

0000000000001020 <.plt>:
    1020:	ff 35 e2 2f 00 00    	pushq  0x2fe2(%rip)        # 4008 <_GLOBAL_OFFSET_TABLE_+0x8>
    1026:	f2 ff 25 e3 2f 00 00 	bnd jmpq *0x2fe3(%rip)        # 4010 <_GLOBAL_OFFSET_TABLE_+0x10>
    102d:	0f 1f 00             	nopl   (%rax)
    1030:	f3 0f 1e fa          	endbr64 
    1034:	68 00 00 00 00       	pushq  $0x0
    1039:	f2 e9 e1 ff ff ff    	bnd jmpq 1020 <.plt>
    103f:	90                   	nop

Disassembly of section .plt.got:

0000000000001040 <__cxa_finalize@plt>:
    1040:	f3 0f 1e fa          	endbr64 
    1044:	f2 ff 25 95 2f 00 00 	bnd jmpq *0x2f95(%rip)        # 3fe0 <__cxa_finalize>
    104b:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)

Disassembly of section .plt.sec:

0000000000001050 <gcd@plt>:
    1050:	f3 0f 1e fa          	endbr64 
    1054:	f2 ff 25 bd 2f 00 00 	bnd jmpq *0x2fbd(%rip)        # 4018 <gcd+0x2eff>
    105b:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)

Disassembly of section .text:

0000000000001060 <deregister_tm_clones>:
    1060:	48 8d 3d c1 2f 00 00 	lea    0x2fc1(%rip),%rdi        # 4028 <completed.8060>
    1067:	48 8d 05 ba 2f 00 00 	lea    0x2fba(%rip),%rax        # 4028 <completed.8060>
    106e:	48 39 f8             	cmp    %rdi,%rax
    1071:	74 15                	je     1088 <deregister_tm_clones+0x28>
    1073:	48 8b 05 76 2f 00 00 	mov    0x2f76(%rip),%rax        # 3ff0 <_ITM_deregisterTMCloneTable>
    107a:	48 85 c0             	test   %rax,%rax
    107d:	74 09                	je     1088 <deregister_tm_clones+0x28>
    107f:	ff e0                	jmpq   *%rax
    1081:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)
    1088:	c3                   	retq   
    1089:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)

0000000000001090 <register_tm_clones>:
    1090:	48 8d 3d 91 2f 00 00 	lea    0x2f91(%rip),%rdi        # 4028 <completed.8060>
    1097:	48 8d 35 8a 2f 00 00 	lea    0x2f8a(%rip),%rsi        # 4028 <completed.8060>
    109e:	48 29 fe             	sub    %rdi,%rsi
    10a1:	48 89 f0             	mov    %rsi,%rax
    10a4:	48 c1 ee 3f          	shr    $0x3f,%rsi
    10a8:	48 c1 f8 03          	sar    $0x3,%rax
    10ac:	48 01 c6             	add    %rax,%rsi
    10af:	48 d1 fe             	sar    %rsi
    10b2:	74 14                	je     10c8 <register_tm_clones+0x38>
    10b4:	48 8b 05 2d 2f 00 00 	mov    0x2f2d(%rip),%rax        # 3fe8 <_ITM_registerTMCloneTable>
    10bb:	48 85 c0             	test   %rax,%rax
    10be:	74 08                	je     10c8 <register_tm_clones+0x38>
    10c0:	ff e0                	jmpq   *%rax
    10c2:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
    10c8:	c3                   	retq   
    10c9:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)

00000000000010d0 <__do_global_dtors_aux>:
    10d0:	f3 0f 1e fa          	endbr64 
    10d4:	80 3d 4d 2f 00 00 00 	cmpb   $0x0,0x2f4d(%rip)        # 4028 <completed.8060>
    10db:	75 2b                	jne    1108 <__do_global_dtors_aux+0x38>
    10dd:	55                   	push   %rbp
    10de:	48 83 3d fa 2e 00 00 	cmpq   $0x0,0x2efa(%rip)        # 3fe0 <__cxa_finalize>
    10e5:	00 
    10e6:	48 89 e5             	mov    %rsp,%rbp
    10e9:	74 0c                	je     10f7 <__do_global_dtors_aux+0x27>
    10eb:	48 8b 3d 2e 2f 00 00 	mov    0x2f2e(%rip),%rdi        # 4020 <__dso_handle>
    10f2:	e8 49 ff ff ff       	callq  1040 <__cxa_finalize@plt>
    10f7:	e8 64 ff ff ff       	callq  1060 <deregister_tm_clones>
    10fc:	c6 05 25 2f 00 00 01 	movb   $0x1,0x2f25(%rip)        # 4028 <completed.8060>
    1103:	5d                   	pop    %rbp
    1104:	c3                   	retq   
    1105:	0f 1f 00             	nopl   (%rax)
    1108:	c3                   	retq   
    1109:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)

0000000000001110 <frame_dummy>:
    1110:	f3 0f 1e fa          	endbr64 
    1114:	e9 77 ff ff ff       	jmpq   1090 <register_tm_clones>

0000000000001119 <gcd>:
    1119:	f3 0f 1e fa          	endbr64 
    111d:	55                   	push   %rbp
    111e:	48 89 e5             	mov    %rsp,%rbp
    1121:	48 83 ec 10          	sub    $0x10,%rsp
    1125:	89 7d fc             	mov    %edi,-0x4(%rbp)
    1128:	89 75 f8             	mov    %esi,-0x8(%rbp)
    112b:	83 7d f8 00          	cmpl   $0x0,-0x8(%rbp)
    112f:	74 15                	je     1146 <gcd+0x2d>
    1131:	8b 45 fc             	mov    -0x4(%rbp),%eax
    1134:	99                   	cltd   
    1135:	f7 7d f8             	idivl  -0x8(%rbp)
    1138:	8b 45 f8             	mov    -0x8(%rbp),%eax
    113b:	89 d6                	mov    %edx,%esi
    113d:	89 c7                	mov    %eax,%edi
    113f:	e8 d5 ff ff ff       	callq  1119 <gcd>
    1144:	eb 03                	jmp    1149 <gcd+0x30>
    1146:	8b 45 fc             	mov    -0x4(%rbp),%eax
    1149:	c9                   	leaveq 
    114a:	c3                   	retq   

000000000000114b <lcm>:
    114b:	f3 0f 1e fa          	endbr64 
    114f:	55                   	push   %rbp
    1150:	48 89 e5             	mov    %rsp,%rbp
    1153:	53                   	push   %rbx
    1154:	48 83 ec 18          	sub    $0x18,%rsp
    1158:	89 7d ec             	mov    %edi,-0x14(%rbp)
    115b:	89 75 e8             	mov    %esi,-0x18(%rbp)
    115e:	8b 45 ec             	mov    -0x14(%rbp),%eax
    1161:	0f af 45 e8          	imul   -0x18(%rbp),%eax
    1165:	89 c3                	mov    %eax,%ebx
    1167:	8b 55 e8             	mov    -0x18(%rbp),%edx
    116a:	8b 45 ec             	mov    -0x14(%rbp),%eax
    116d:	89 d6                	mov    %edx,%esi
    116f:	89 c7                	mov    %eax,%edi
    1171:	e8 da fe ff ff       	callq  1050 <gcd@plt>
    1176:	89 c1                	mov    %eax,%ecx
    1178:	89 d8                	mov    %ebx,%eax
    117a:	99                   	cltd   
    117b:	f7 f9                	idiv   %ecx
    117d:	48 83 c4 18          	add    $0x18,%rsp
    1181:	5b                   	pop    %rbx
    1182:	5d                   	pop    %rbp
    1183:	c3                   	retq   

Disassembly of section .fini:

0000000000001184 <_fini>:
    1184:	f3 0f 1e fa          	endbr64 
    1188:	48 83 ec 08          	sub    $0x8,%rsp
    118c:	48 83 c4 08          	add    $0x8,%rsp
    1190:	c3                   	retq   
23 ноя 20, 00:59    [22236867]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
А это вид с точки зрения readElf
+
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x1060
  Start of program headers:          64 (bytes into file)
  Start of section headers:          14184 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         11
  Size of section headers:           64 (bytes)
  Number of section headers:         27
  Section header string table index: 26

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .note.gnu.propert NOTE             00000000000002a8  000002a8
       0000000000000020  0000000000000000   A       0     0     8
  [ 2] .note.gnu.build-i NOTE             00000000000002c8  000002c8
       0000000000000024  0000000000000000   A       0     0     4
  [ 3] .gnu.hash         GNU_HASH         00000000000002f0  000002f0
       0000000000000028  0000000000000000   A       4     0     8
  [ 4] .dynsym           DYNSYM           0000000000000318  00000318
       00000000000000a8  0000000000000018   A       5     1     8
  [ 5] .dynstr           STRTAB           00000000000003c0  000003c0
       000000000000005d  0000000000000000   A       0     0     1
  [ 6] .rela.dyn         RELA             0000000000000420  00000420
       00000000000000a8  0000000000000018   A       4     0     8
  [ 7] .rela.plt         RELA             00000000000004c8  000004c8
       0000000000000018  0000000000000018  AI       4    20     8
  [ 8] .init             PROGBITS         0000000000001000  00001000
       000000000000001b  0000000000000000  AX       0     0     4
  [ 9] .plt              PROGBITS         0000000000001020  00001020
       0000000000000020  0000000000000010  AX       0     0     16
  [10] .plt.got          PROGBITS         0000000000001040  00001040
       0000000000000010  0000000000000010  AX       0     0     16
  [11] .plt.sec          PROGBITS         0000000000001050  00001050
       0000000000000010  0000000000000010  AX       0     0     16
  [12] .text             PROGBITS         0000000000001060  00001060
       0000000000000124  0000000000000000  AX       0     0     16
  [13] .fini             PROGBITS         0000000000001184  00001184
       000000000000000d  0000000000000000  AX       0     0     4
  [14] .eh_frame_hdr     PROGBITS         0000000000002000  00002000
       0000000000000034  0000000000000000   A       0     0     4
  [15] .eh_frame         PROGBITS         0000000000002038  00002038
       00000000000000b4  0000000000000000   A       0     0     8
  [16] .init_array       INIT_ARRAY       0000000000003e50  00002e50
       0000000000000008  0000000000000008  WA       0     0     8
  [17] .fini_array       FINI_ARRAY       0000000000003e58  00002e58
       0000000000000008  0000000000000008  WA       0     0     8
  [18] .dynamic          DYNAMIC          0000000000003e60  00002e60
       0000000000000180  0000000000000010  WA       5     0     8
  [19] .got              PROGBITS         0000000000003fe0  00002fe0
       0000000000000020  0000000000000008  WA       0     0     8
  [20] .got.plt          PROGBITS         0000000000004000  00003000
       0000000000000020  0000000000000008  WA       0     0     8
  [21] .data             PROGBITS         0000000000004020  00003020
       0000000000000008  0000000000000000  WA       0     0     8
  [22] .bss              NOBITS           0000000000004028  00003028
       0000000000000008  0000000000000000  WA       0     0     1
  [23] .comment          PROGBITS         0000000000000000  00003028
       000000000000002a  0000000000000001  MS       0     0     1
  [24] .symtab           SYMTAB           0000000000000000  00003058
       00000000000004b0  0000000000000018          25    44     8
  [25] .strtab           STRTAB           0000000000000000  00003508
       0000000000000172  0000000000000000           0     0     1
  [26] .shstrtab         STRTAB           0000000000000000  0000367a
       00000000000000e9  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  l (large), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x00000000000004e0 0x00000000000004e0  R      0x1000
  LOAD           0x0000000000001000 0x0000000000001000 0x0000000000001000
                 0x0000000000000191 0x0000000000000191  R E    0x1000
  LOAD           0x0000000000002000 0x0000000000002000 0x0000000000002000
                 0x00000000000000ec 0x00000000000000ec  R      0x1000
  LOAD           0x0000000000002e50 0x0000000000003e50 0x0000000000003e50
                 0x00000000000001d8 0x00000000000001e0  RW     0x1000
  DYNAMIC        0x0000000000002e60 0x0000000000003e60 0x0000000000003e60
                 0x0000000000000180 0x0000000000000180  RW     0x8
  NOTE           0x00000000000002a8 0x00000000000002a8 0x00000000000002a8
                 0x0000000000000020 0x0000000000000020  R      0x8
  NOTE           0x00000000000002c8 0x00000000000002c8 0x00000000000002c8
                 0x0000000000000024 0x0000000000000024  R      0x4
  GNU_PROPERTY   0x00000000000002a8 0x00000000000002a8 0x00000000000002a8
                 0x0000000000000020 0x0000000000000020  R      0x8
  GNU_EH_FRAME   0x0000000000002000 0x0000000000002000 0x0000000000002000
                 0x0000000000000034 0x0000000000000034  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x10
  GNU_RELRO      0x0000000000002e50 0x0000000000003e50 0x0000000000003e50
                 0x00000000000001b0 0x00000000000001b0  R      0x1

 Section to Segment mapping:
  Segment Sections...
   00     .note.gnu.property .note.gnu.build-id .gnu.hash .dynsym .dynstr .rela.dyn .rela.plt 
   01     .init .plt .plt.got .plt.sec .text .fini 
   02     .eh_frame_hdr .eh_frame 
   03     .init_array .fini_array .dynamic .got .got.plt .data .bss 
   04     .dynamic 
   05     .note.gnu.property 
   06     .note.gnu.build-id 
   07     .note.gnu.property 
   08     .eh_frame_hdr 
   09     
   10     .init_array .fini_array .dynamic .got 

Dynamic section at offset 0x2e60 contains 20 entries:
  Tag        Type                         Name/Value
 0x000000000000000c (INIT)               0x1000
 0x000000000000000d (FINI)               0x1184
 0x0000000000000019 (INIT_ARRAY)         0x3e50
 0x000000000000001b (INIT_ARRAYSZ)       8 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x3e58
 0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x2f0
 0x0000000000000005 (STRTAB)             0x3c0
 0x0000000000000006 (SYMTAB)             0x318
 0x000000000000000a (STRSZ)              93 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000003 (PLTGOT)             0x4000
 0x0000000000000002 (PLTRELSZ)           24 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x4c8
 0x0000000000000007 (RELA)               0x420
 0x0000000000000008 (RELASZ)             168 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffff9 (RELACOUNT)          3
 0x0000000000000000 (NULL)               0x0

Relocation section '.rela.dyn' at offset 0x420 contains 7 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000003e50  000000000008 R_X86_64_RELATIVE                    1110
000000003e58  000000000008 R_X86_64_RELATIVE                    10d0
000000004020  000000000008 R_X86_64_RELATIVE                    4020
000000003fe0  000100000006 R_X86_64_GLOB_DAT 0000000000000000 __cxa_finalize + 0
000000003fe8  000200000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_registerTMCloneTa + 0
000000003ff0  000300000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_deregisterTMClone + 0
000000003ff8  000400000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0

Relocation section '.rela.plt' at offset 0x4c8 contains 1 entry:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000004018  000600000007 R_X86_64_JUMP_SLO 0000000000001119 gcd + 0

The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.

Symbol table '.dynsym' contains 7 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __cxa_finalize
     2: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
     3: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
     4: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
     5: 000000000000114b    57 FUNC    GLOBAL DEFAULT   12 lcm
     6: 0000000000001119    50 FUNC    GLOBAL DEFAULT   12 gcd

Symbol table '.symtab' contains 50 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000000002a8     0 SECTION LOCAL  DEFAULT    1 
     2: 00000000000002c8     0 SECTION LOCAL  DEFAULT    2 
     3: 00000000000002f0     0 SECTION LOCAL  DEFAULT    3 
     4: 0000000000000318     0 SECTION LOCAL  DEFAULT    4 
     5: 00000000000003c0     0 SECTION LOCAL  DEFAULT    5 
     6: 0000000000000420     0 SECTION LOCAL  DEFAULT    6 
     7: 00000000000004c8     0 SECTION LOCAL  DEFAULT    7 
     8: 0000000000001000     0 SECTION LOCAL  DEFAULT    8 
     9: 0000000000001020     0 SECTION LOCAL  DEFAULT    9 
    10: 0000000000001040     0 SECTION LOCAL  DEFAULT   10 
    11: 0000000000001050     0 SECTION LOCAL  DEFAULT   11 
    12: 0000000000001060     0 SECTION LOCAL  DEFAULT   12 
    13: 0000000000001184     0 SECTION LOCAL  DEFAULT   13 
    14: 0000000000002000     0 SECTION LOCAL  DEFAULT   14 
    15: 0000000000002038     0 SECTION LOCAL  DEFAULT   15 
    16: 0000000000003e50     0 SECTION LOCAL  DEFAULT   16 
    17: 0000000000003e58     0 SECTION LOCAL  DEFAULT   17 
    18: 0000000000003e60     0 SECTION LOCAL  DEFAULT   18 
    19: 0000000000003fe0     0 SECTION LOCAL  DEFAULT   19 
    20: 0000000000004000     0 SECTION LOCAL  DEFAULT   20 
    21: 0000000000004020     0 SECTION LOCAL  DEFAULT   21 
    22: 0000000000004028     0 SECTION LOCAL  DEFAULT   22 
    23: 0000000000000000     0 SECTION LOCAL  DEFAULT   23 
    24: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    25: 0000000000001060     0 FUNC    LOCAL  DEFAULT   12 deregister_tm_clones
    26: 0000000000001090     0 FUNC    LOCAL  DEFAULT   12 register_tm_clones
    27: 00000000000010d0     0 FUNC    LOCAL  DEFAULT   12 __do_global_dtors_aux
    28: 0000000000004028     1 OBJECT  LOCAL  DEFAULT   22 completed.8060
    29: 0000000000003e58     0 OBJECT  LOCAL  DEFAULT   17 __do_global_dtors_aux_fin
    30: 0000000000001110     0 FUNC    LOCAL  DEFAULT   12 frame_dummy
    31: 0000000000003e50     0 OBJECT  LOCAL  DEFAULT   16 __frame_dummy_init_array_
    32: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS gcd-lcm.c
    33: 0000000000001119    50 FUNC    LOCAL  DEFAULT   12 gcd.localalias
    34: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    35: 00000000000020e8     0 OBJECT  LOCAL  DEFAULT   15 __FRAME_END__
    36: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS 
    37: 0000000000003e60     0 OBJECT  LOCAL  DEFAULT   18 _DYNAMIC
    38: 0000000000004028     0 OBJECT  LOCAL  DEFAULT   21 __TMC_END__
    39: 0000000000004020     0 OBJECT  LOCAL  DEFAULT   21 __dso_handle
    40: 0000000000001000     0 FUNC    LOCAL  DEFAULT    8 _init
    41: 0000000000002000     0 NOTYPE  LOCAL  DEFAULT   14 __GNU_EH_FRAME_HDR
    42: 0000000000001184     0 FUNC    LOCAL  DEFAULT   13 _fini
    43: 0000000000004000     0 OBJECT  LOCAL  DEFAULT   20 _GLOBAL_OFFSET_TABLE_
    44: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __cxa_finalize
    45: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
    46: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
    47: 000000000000114b    57 FUNC    GLOBAL DEFAULT   12 lcm
    48: 0000000000001119    50 FUNC    GLOBAL DEFAULT   12 gcd
    49: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__

Histogram for `.gnu.hash' bucket list length (total of 2 buckets):
 Length  Number     % of total  Coverage
      0  1          ( 50.0%)
      1  0          (  0.0%)      0.0%
      2  1          ( 50.0%)    100.0%

No version information found in this file.

Displaying notes found in: .note.gnu.property
  Owner                Data size 	Description
  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
      Properties: x86 feature: IBT, SHSTK

Displaying notes found in: .note.gnu.build-id
  Owner                Data size 	Description
  GNU                  0x00000014	NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 1af2c0685f139f1fb4659ebf947e01f4e8a93ba1


Модератор: Тема перенесена из форума "Java".


Сообщение было отредактировано: 23 ноя 20, 10:02
23 ноя 20, 01:02    [22236868]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
Для парсинга Windows exe/dll тоже выложу собранные парсеры под C++/C#.

К сообщению приложен файл (microsoft_pe_cpp.zip - 7Kb) cкачать
24 ноя 20, 00:17    [22237566]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49768
И еще.

К сообщению приложен файл (MicrosoftPe.zip - 5Kb) cкачать
24 ноя 20, 00:20    [22237567]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Программирование Ответить