Книги: x86 Assembly Language Step-By-Step - Programming with Linux Jeff Duntemann
x64(упор сделан на математические расширения avx, avx2 и avx512) Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512 Куссвюрм Даниэль
>>2425757 (OP) Читая книги по ассемблерам я понял что раньше развитие в плане прозводительности шло по сути за счёт расширения регистров, увеличения кол-ва ядер и ускорения самих проциков.
Однако сейчас уже ясно что чисто физически из этого выжато всё что можно: плотность транзисторов достигла максимума, гигарецы разогнаны по максимуму, быстрее уже физика не пвозляет. То есть новые регистры ядра уже не впихнуть, да и ггц не нагнать.
И сейчас упор на прирост производительности будет делаться за счёт алгоритмов, создания регистров и команд специального назначения типа как в книге по ассемблеру x64 написано, что мне здесь советовали. Там рассказывается про avx avx2 avx512 вот все наборы расширений. Там есть например специальные команды которые позволяют избегать лишних команд условного перехода, лучше обрабатывать определённые типы данных и просто много параллельно типа упакованных чисел. То есть на это упор всё будет идти. Будут возможно конвейры оптимизировать.
Да и что тут думать я с 2012го года заметил что прирост в памяти и гигарецах с ядрами в техники нет. Сейчас стабильно ноутбуки бюджетные с 4-8гб оперативы продаются с 2-4 ядерными процессорами тоже самое в 2012ом году было. Кстати. Единственное что поменялось это ssd начали ставить вместо механического жд.
SYCL>>2425761 >И сейчас упор на прирост производительности будет делаться за счёт алгоритмов А долбаебы все еще будут писать на петухонах. Хартьфу, блять.
>>2439102 Ты дурачок. Специалисты сидят в всяких реверсах, вирях-антивирях и зарабатывают дохуя больше всех этих ваших милородов макачьих. Заметил, что исчезла та самая сцена? А куда она делась? Правильно. Сейчас, с развитием information warfare и ебовой кучи APT-подразделений на подсосе у кучи государств можно найти один бажик, продать и уходить на пенсию.
Наверное в будущем электричества не будет в компьютерах или оно будет значительно сокращено. Всё будет на оптике построено, уже щас процики упираются в ограничения по физике в плане скорости и в плане компактности умещения транзисторов на нанометр.
Думаю реально в будущем просто в ход массово пойдут оптические процессоры и всё. Сети будут оптическими, процессоры, память оптической.
И это наверное и будет тот самый рассвет айти технологии.
Уважаемые Боги asm-а,подскажите, почему kmovd инструкция работает в Windows 10 (даже на старых процессорах), а в Windows 7 спамит "illegal instruction". Сначала подумал, что сам дурак - обмазался апдейтами и vc pack-ами. А ошибка не ушла. Что-то ещё нужно установить?
>>2463290 Возможно win10 просто эту инструкцию приобразует в её аналог на более старом процессоре или группу аналогов которые выполнят то что выполняет это команда. А ты что думал майкрософт просто так говорил в 2015ом что win10 оживит даже старое железо?
>>2463633 Я не уверен точно заморочились ли они, просто предположил.
Вообще на ассемблере я никогда ничего не писал, весь мой ассемблер ограничился чтением двух книг по x86, 86-64 и разбор 3 режимов памяти: лонг, протектед и риал.
Так что мои советы особо ничего не стоят, но тред всё равно полудохлый поэтому имеем что имеем. Попробуй на англюсике свой вопрос на англоязычных профильных форумах позадавать.
Здравствуйте, решил изучать Assembler, по этому видео (https://youtu.be/PHyIP9g9BQw) установил виртуальную машину, на неё - ms-dos, потом - masm611, написал программу, выводящую "Hello, World":
.8086 code SEGMENT para USE16 PUBLIC 'code' ASSUME CS:code, DS:code, SS:code, ES:code ORG 100h START: message db 'Hello, World$' mov ah, 9h mov dx, offset message int 21h ret code ends end START
После сохранения пишу в командной строке: C:\MASM611\BIN> ml.exe /AT program.asm
Выдаёт ошибку: A1020: cannot find link.exe
Насколько понял из статей в интернете, ассемблер не может найти путь к линковщику, и ему надо его показать, подскажите, пожалуйста, как это сделать?
А разве шесть АЛУ, VLIW и конпеляторное распараллеливание-конвееризация вместо аппаратных это некруто? Что по вашему мнению вышло, если эльбрусы пустили в норот? БЗВ есть схожие архитектуры? мимо-обыватель-из-норота
>>2425757 (OP) Анончики, не прошу вас код написать, прошу подсказать алгоритм, правильно ли я подумал.
Задание звучит так: "Определить положение (номер разряда) крайней левой единицы."
Например дано число 001010, то надо 3 сдвига влево или 4 вправо чтобы получить. Однако, сдвиги влево мне не скажут номер разряда, так как разряд справа считается как я понял., значит вправо надо сдвигать, а как понять когда будет последняя единица?
На другом языке я догадываюсь как сделал бы, узнал бы длину бита и прошелся бы по нему спокойно через цикл, тут просто реализация сложнее будет
В чем вы пишите? Я просто в текстовом редакторе дофолтном и в консольки компилирую. Правда мне еще gdb не пригодился, не знаю будет ли дальше так же удобно
>>2425757 (OP) ASM X80 Задание. Вычесть элементы массивов как целые двоичные числа со знаком.Знак кодируется в старшем бите старшего байта. Блин жесть, 1-го регистра не хватает чтобы реализовать задуманное. D.E. - занято, адрес хранит первого массива H.L - занято, адрес хранит второго массива В - счетчик для массивов А и С используются для преобразования двоично-десятичной системы в двоичную. А больше регистров и нет.
Как работает программа: Алгоритм следующий. 1) Мы заполняем массив ОЗУ стенда, адреса 0840, 0841, … , 0846 и адреса 0850, 0851, … , 0856. Сохраняем в регистры H.L, D.E, номера адресов 0840 и 0850 соответственно, выполняется это командой LXI H, 0840 и LXI D, 0850. Далее, командой STAX D, записываем в память содержимое регистра А, адрес записи находится в регистре D.E (0850). Также будем хранить в регистре В значение необходимых итераций, он будет способствовать прохождению по всем элементам массива. Далее, вызываем процедуру которая будет проходиться по ячейкам массива и “доставать” от туда значения этих ячеек. CALL ProcSub – вызов этой процедуры. В этой процедуре инкрементируем номера адресов (увеличиваем регистры D.E и H.L на 1) командами INX H, INX D. После чего, командой LDAX D, читаем ячейку памяти по адресу хранящемуся в регистре D.E, и записываем его в регистр А. 2) Надо преобразовать двоично-десятичную систему в двоичную, чтобы потом их вычесть. И тут проблема начинается, у меня А и С используются для преобразования, а мне нужен отдельный регистр куда можно сохранить значение аккумулятора первого числа, потом сохранить в аккумулятор значение 2-го числа и отнять их...
Где можно получить ещё регистр? Или можно счетчик В куда-то в другое место запихнуть? Я просто не шарю за ассемблер https://pastebin.com/HXgR13UX
>>2425757 (OP) >x86 >x64 Зачем учить ненужные платформы, на которых ассемблер не используется? Ассемблер - это либо современные микроконтроллеры, либо ретро игры с демосценой (Z80, 6502, Motorola 6800).
>>2518917 Так Intel 8080 это и есть ретро. Там и компиляторов ЯВУ нормальных не завезли. И нужно считать каждый байт и каждый такт процессора. А вот для x86/x64 нет совершенно никакого смысла писать на ассемблере. Тем, кто пишет для многоядерных процессоров - следует немедленно вызывать врачей и госпитализировать в Кащенку, такие люди опасны для общества.
>>2518960 >>2518905 А почему при CALL, у меня указатель стека меняется? и вообще че это за значения, как они влияют на работу программы?
Я короче написал PUSH PSW, у меня он перескачил на 1 адрес и почему-то значение 6 там указано, откуда оно вообще. Как я понял при команде PUSH PSW мы в стек закинем значения двойного регистра A.F, бля а че за F, у меня его вообще нету лол
Простите за тупой вопрос. Читаю про эти ваши ассемблеры и не пойму, стек - это просто выделенная область в оперативной памяти или что-то вроде регистра в процессоре?
>>2525511 А кто занимается выделением и организацией памяти под стек? Программист или процессор? Когда я использую команду push ax, где конкретно сохраняется это значение регистра? Если в памяти, то по какому адрессу? Просто в учебниках это описывается как само себе разумеющееся: помещаем данные в стек, достаем из стека. А куда именно, я никак не пойму.
>>2525540 >кто занимается Ядро операционной системы, когда ставит программу на выполнение.
>push ax Два действия в одном: сдвинуть вершину стека (изменив регистр с указателем) и записать по этому адресу значение из "ax".
>Если в памяти, то по какому адресу Зависит от того, как называется регистр с указателем и куда увеличивается стек. И ещё от длины записываемого числа. Если это "bi" и стек увеличивается вниз, то "bi-4" на x86 или "bi-8" на AMD64.
>>2525597 Жесть, конечно, с этими вашими регистрами и указателями. С трудом продираюсь. Все равно спасибо. Вы поди смотрите на шестнадцатиричный код и уже представляете, что там происходит?
>>2525622 Именно это может вылезти на микроконтроллерах, где нет никакой защиты и область стека способна испортить соседнюю область, когда станет очень большой. На обыкновенной пекарне такие "знания" бесполезны.
Для процесса/процессов - ОС. Сами процессы уже разбивают полученное стэковое пространство на фреймы для отдельных функций, если сочтётся необходимым. А вообще может зависеть от архитектуры, оси, реализации памяти итд
>и организацией памяти под стек? На разных архитектурах по-разному. На х86 текущий стэковый фрейм определяется двумя стэковыми регистрами sp и bp, и одним сегментным регистром ss. sp указывает на вершину стэка, bp - на базу стэка, ss - определяет сегмент памяти в котором стэк располагается но здесь уже всё несколько сложнее
>Когда я использую команду push ax, где конкретно сохраняется это значение регистра?
Содержимое ax копируется в 4 байта, нулевой байт из которых определяет регистром sp. После чего sp уменьшается на 4 (стэк растёт вниз). pop ax - ровно наоборот.
>>2525275 Стек - дисциплина обслуживания такая. В ASMе стек необходим для организации прерываний ну и для удобства - для процедурных вызовов. В AMD64 на уровне ISA есть лишь регистр RSP и стековые команды, работающие с ним. И всё.
>Программист или процессор? Чего? Для управления памятью в ISA имеется механизм пейджинга, в том числе некоторые привилегированные (RING0) команды. Таким образом, организация рабочих наборов приложения происходит через посредство ОС. Ещё на организацию памяти приложения может влиять рантайм конкретного ЯВУ (если есть).
>Когда я использую команду push ax, где конкретно сохраняется это значение регистра? Ну так прочитай, как команда работает. Вообще, чтение учебников не заменяет чтение спецификации ISA.
>стэковыми регистрами sp и bp, В AMD64 RBP стал общего назначения а SS вообще не используется.
>>2525622 > Вы поди смотрите на шестнадцатиричный код и уже представляете, что там происходит? Если специально не задрачивать этот навык, то хекс останется хексом, даже когда 10 лет знаешь охрюнитектуру.
>>2526802 регистром общего назначения называют регистр, если с ним можно делать всякие штуки на ALU. Если ты можешь написать add sp, 3 или xor sp, 0x55 то он РОН. А то что у него есть доп фунции это другое. У всех регистров есть свои ништяки, вроде деления в DX/AX или косвенной адресации с индеском. А вот add EIP, 3 ты не напишешь. Аналогично, сегментные регистры, CS, DS.
>>2528452 >если в один такт молотить один регистр, а не в 4 такта 4 регистра? не забудь посчитать за сколько тактов ты будешь собирать 4 байта в 1 регистр.
Тряхнул стариной, написал бутлоадер, который дает вводить другую программу в хексах. Правда, потом прочитал что INC/DEC давно никто не пользуется потому что они сбрасывают конвеер данных или типа того.
>>2528699 Я особо не вчитывался, что-то про то, что ADD портит все флаги, а INC только часть, поэтому, получается парадокс, ADD не ждет выполнение других команд и процессор ставит его полностью параллельное выполнение, а INC вынужден ждать завершения предыдущих команд. https://github.com/dotnet/runtime/issues/7697
>>2528962 Я неправильно выразился, скорее всего конвеера данных нет, сбрасывается или стопорится конвеер команд, из за зависимости по данным, так будет яснее?
>>2425757 (OP) Сап, двач, а какую книгу надо выгуглить по актуальным архитектурам процессоров, чтобы понимать глубоко и полностью суть, как в этом видео, но подробно: https://youtu.be/XWZTHecUluM И не просто теорию в целом, поверхностно, но глубже. К примеру, в видео говорят, что кэшируется память самостоятельно, а мне хочется понимать как именно "самостоятельно", что именно она кеширует, как выбирает, и кто за это в железе отвечает, не магия же.
>>2529086 Анонче, у меня нет с этим проблем. Если у вас принято называть по хипстерски, могу называть по хипстерски. У меня опен майнд, ноу кринж ресивед.
Читал Прата программирование на с++ он там представил эмуляцию стека. Но я чёто догадываюсь и нахожу поверхностные упоминания что стек в ассемблере сделан по другому. Может быть там в процессорах есть какие-то регистры стека? Задействую ли я стек программируя на языке высокого уровня?
>>2534485 Стандарты c/c++ практически никак не коррелируют с устройством процессора, они описывают язык. Ну а компилятор, естественно, создает такой код, который использует аппаратный стек. Если упрощенно, то стек это кусок памяти, а какой-то регистр указывает на конретное место в ней, и некоторые команды, типа push, pop, call, ret, пихают данные и двигают этот указатель. В первую очередь это происходит при вызовах функций, они как матрешки. Конечно ты можешь написать и свою "симуляцию стека", то есть видимо там речь просто про массив со счетчиком или указатель.
>>2534509 >то стек это кусок памяти вот то что я хотел знать. Стэк храниться в оперативке а SP например хранит ссылку туда. Ато ж вон пишут что у процов есть регистры и кэши и типа там самая быстрая память
>>2537905 > Стэк храниться в оперативке а SP например хранит ссылку туда. Да. > у процов есть регистры Это касается больше математики и подобного, когда регистр с регистром складывать быстрее чем регистр с переменной в памяти. >кэши До них вообще не достучаться наверное (точно не помню), он как бы сам по себе работает в фоновом режиме
>>2537909 >Это касается больше математики и подобного Это касается всего: любые операции над данными происходят в регистрах, а сами данные туда сначала должны быть загружены, а потом записаны в память при необходимости.
Хотя я не исключаю что на на x86 могут быть всякие убер-команды работающие сразу с памятью - я только ARMы ебу, да иногда еще SuperH, лет 5 назад плотно работал с MIPS.
>До них вообще не достучаться наверное (точно не помню), он как бы сам по себе работает в фоновом режиме Не совсем: можно сделать данным prefetch, чтобы они были загружены в кэш еще до того как понадобятся. Так же на том где я работаю есть блокировка кэш-лайнов, чтобы данные находящиеся в них не вытеснялись другими данными. Это позволяет делать даже такие весёлые штуки, как работа CPU с DRAM переведённым в self-refresh mode ебля та ещё, но поллить gpio в low power режиме вполне можно.
>>2425757 (OP) >Assembly Language Step-By-Step Весьма заходит эта книга. Но почему до сих пор нет перевода на русский? С одной стороны, конечно, полезно подтянуть английский. Но, с другой стороны, очень медленное чтение, хочется быстрее проглотить эту мням-нямку.
Здравствуйте, программисты. Я не программист. И вопрос даже не о языке ассемблера как таковом. Просто вопрос связан с довольно низкоуровневой штукой, и я решил, что именно тут могут сидеть достаточно компетентные нерды. Можно ли чисто в теории сконвертировать скомпилированную 32-битную программу в 64-битную? То есть, проанализировать её машинный код, и выдать программу, делающую аналогичные по сути вещи, но являющуюся 64-битной. Что примерно нужно сделать, если это возможно в принципе? Контекст вопроса: возможность запустить старую программу на новой версии мак ос, в которой не работают 32-битные программы вообще. Заранее спасибо за ответ.
Full list of changes and new features: IDA Teams and Lumina
lumina: added support for recent MySQL versions which default to TLS connection teams: the password for Vault is now saved securely in the OS-specific keychain vault/lumina: allow any local MAC address to match the one specified in .lic file
Procesor modules
XTENSA: added support for many additional instructions, registers, stack variables (thanks to Zak Escano) XTENSA: added support for many standard switch patterns (thanks to Zak Escano) XTENSA: detect used ABI (CALL0 or windowed) RISC-V: added support for vector extension instructions TRICORE: decode FTOHP and HPTOF instructions from TC1.6.2
File formats
macho: added USE_SEG_PREFIXES option to macho.cfg, which instructs IDA to use the Mach-O segment name as a prefix for IDA segment names, e.g. "__TEXT:__text"
FLIRT / TILS / IDS
FLIRT: added signatures for vc1434 (Visual Studio 16.11) FLIRT: added MFC signatures for vc1434 (Visual Studio 16.11) FLIRT: added signatures for icl 222 (Intel C++ 2021.2) FLIRT: added signatures for icl 2221 (Intel C++ 2021.2.1) TIL: added a type library for Aarch64 (ARM64) UEFI 2.5 idaclang: added "--idaclang-mangle-format" switch. it works similarly to the -G option for tilib when the user wants to set a custom name mangling format
Standard plugins
PDB: on Windows, enabled fallback mode by default so that MSDIA is used to load legacy PDB files picture_search: new plugin for finding and displaying raster images embedded in the binary svdimport: added support for cluster, derivedFrom and dim/dimIncrement peripheral attributes svdimport: use a folder-based tree for the plugin's UI swift: parse and format Swift metadata swift: import simple types (enums, structs) into Local Types
Kernel
kernel: added a new flag REFINFO_SELFREF for offsets (base is equal to the address of the current element)
Scripting & SDK
IDAPython: expose the C++ SDK's processor_t (as ida_idp._processor_t) SDK: added capture_process_output() to capture output of an external program; SDK: added support for lazy-loaded dirtree choosers. CH2_LAZY_LOADED flag can be used with dirtree-based choosers to load contents of a directory when it's expanded. SDK: deprecated qerrcode() (errno can be accessed directly instead)
UI
UI: added an easy way to take memory snapshot of current segment UI: improved highlighting of matching registers on platforms which use various prefixes (e.g. @r1) UI: in the disassembly, addresses in the line prefixes of structure or array members now increase with those members' offsets. UI: it is now possible to attribute an image as background to the listings (IDA View, Pseudocode, ...) using CSS in themes UI: jumping to an address in the middle of a struct or an array now positions cursor on the correct line of the disassembly listing UI: the "Wait" dialog now only shows after a certain timeout (thereby reducing the number of interfering popping dialogs)
Decompilers
decompiler: added an action to jump to a new pseudocode windows with 'alt+enter' shortcut decompiler: enabled decompiling of 32-bit files in IDA64 if a corresponding 32-bit decompiler license is available
Bugfixes
BUGFIX: arm: "set callee" (Alt-F11) failed to create cross-references for BLR instructions BUGFIX: alpha: 'lda' instructions could cause wrong sized stack variables to be created BUGFIX: DWARF: Debug information present in .dwz companion files (pointed to by .gnu_debugaltlink) would be skipped when the link is absolute BUGFIX: FLAIR: The pelf utility could crash when used with incorrect 'pelf.rtb' files BUGFIX: IDA could crash if an array typedef was replaced by a structure of the same size BUGFIX: IDA could fail to detect dyld (and any loaded modules) after attaching to a process on macOS 13. BUGFIX: IDA could fail to parse Objective-C method data during debugging. BUGFIX: IDAPython: cfunc_t.arguments array could have function arguments in wrong order BUGFIX: IDAPython: documentation for ida_kernwin.Choose callbacks was missing BUGFIX: IDAPython: get_reg_vals() was not usable BUGFIX: IDAPython: using values in the range [128,255) as 'tag' for ida_netnode functions, would fail BUGFIX: ios_deploy "symbols" phase would fail on iOS 14-16. BUGFIX: lumina: private lumina server could fail starting with certain MySQL setups, due to case sensitivity in INFORMATION_SCHEMA.COLUMNS fields BUGFIX: PC: callee target was not printed for some call instructions BUGFIX: svdimport: fixed problem with odd (+1) start addresses in segments BUGFIX: ui/qt: IDA could crash when passed the wrong widget to ida_kernwin.get_highlight() BUGFIX: ui: "size" expressions in 'Structure offset' context menu differed from 'T' hotkey BUGFIX: ui: exporting data from hex view with non-default item width could produce wrong output BUGFIX: UI: IDA on Windows would hang if the accessibilty option "Use text cursor indicator" was enabled BUGFIX: ui: improvements for accessibility under Windows for "Text Cursor Indicator" on "Output" widget BUGFIX: vault: 'hv purge' command was not usable BUGFIX: xtensa: write acccesses for stack variables were not shown properly
Блядь какая же лютая дичь этот ваш ассемблер. Сраный цикл написать надо танцы с бубнами на 10 минут. Наверное только познав дзен можно писать на ассемблере.
Правильно ли я понимаю аналогию понятий? OFFSET - это мое нахождение, например, на 10 этаже здания. То есть - 10. А DISPLACEMENT - это на сколько этажей я туда-сюда опускаю и поднимаю веревку с грузом, например, до 8 этажа, значит - 2. Так?
Почему загрузка ОС в 16 битном режиме до сих пор происходит? Я понимаю, легаси, все такое, но неужели нельзя уже отбросить это и запускаться в 32 битном режиме? Или просто нахуй не надо?
>>2578496 Disaplacement - это часть адресации в команде, а offset - скорее всего доисторическая отсылка к segment:offset, которая емнип не нужна ни в 64 битном, ни в каком-нибудь real или flat memory model. Но как я сказал, концептуально это синонимы. Offset - относительно Base. Например, BIOS загружает с диска загрузчик в память на адрес 0x7с00. Это может быть как 0000:7c00, так и 07c0:0000, и разных других комбинациях. Поскольку addr = segment x 16 + offset. Имхо никакие такие аналогии с этажами вообще не нужны. Это же просто формулы сложения, где некоторых членов может не быть. Например, [esi + ebp * 4 + 9] это [BASE + INDEX × SCALE + DISPLACEMENT]. Ну и что это будет за аналогия? Лифт в небоскребе, который установлен на 9 этаже, ходит через каждые 4 этажа, и при этом стартует с esi?
А что за мудаки сидят на crackmes.one и проверяют решения? По какому принципу решение другого мудака, который написал брутфорс-скрипт на питоне, который тупо числа перебирает в терминал, пока не угадает, приняли, а моё, выдающее точный результат, нет? Им ещё буковы надо написать какие-то, объяснить, как я пришёл к решению? Что за хуета?
>>2586518 Ладно, что-то я сильно на негативных эмоциях был и зазря обосрал хороших людей с хорошим проектом. Даже стыдно. Просто концепция сайта, видимо, предполагает, что опубликованные решения должны быть более подробны и полезны для других обучающихся. Но при этом сайту очень не хватает нормальной обратной связи по этой самой "подробности".
>>2586518 Эх, я когда-то отсылал свои солюшены на ныне несуществующие сайты. васм.ру, мс-рем, были времена. Даже писал на фрилансе драйвер-фильтры на асме. И кто-то даже этим пользовался. Сейчас зарабатываю шекели на скриптоте и хочу вкатиться в 8080 и з80. В детстве не хватало мозгов и литературы, а формального образования по теме я не получил.
>>2588461 Ковырялся в чит енжине и заметил, что когда инструкция грузит число в ФПУ стек, то регистры съезжают вниз и ST(6) переезжает в ST(7), но когда позже инструкция выгружает число, то регистры съезжают вверх и ST(7) переезжает в ST(6), но ST(7) показывает то же число, что и было до пуша. Хотя в ST(0) грузилось то же число, что и было в ST(7), может оно переехало туда после попа. Ну и в регистрах всегда какие-то числа есть, но оно не ругается, если загрузить еще одно и тем самым переполнить стек.
ебать там тему вскрыли
Аноним27/01/23 Птн 14:38:00№2589476130
Ice Lake was released in 2019 but this information is only a few months old. So hopefully multiplication etc actually is always constant-time on existing chips and this is just preparing for the future?
I guess the steady state is that every OS sets this DOITM bit all the time, but Intel get to publish benchmarks based on variable-time instructions and claim that they're using the default configuration?
Reading between the lines, I think this is a vulnerability and mitigations disclosure for 6th to 12th gen (fixed in 13th?), disguised as a feature. They discovered that "data values may delay instruction retirement by, at most, one cycle" for vector multiplication and bit count.
Где найти insight для 32-битной убунты, который используется в книге Дантмана. Я нашел только для 64-битной системы и там таки да, работает, а в 32-битной не хочет.
>>2603731 Впрочем, не надо. Разобрался, как играться и в 64-битной убунте. Оказывается, всего-то надо было установить дополнительные библиотеки gcc, чтобы он не ругался и мог компиллировать 32-битный код.
>>2604244 Безопасно ли изменять значения флагов и регистров в вызываемой функции? Например, бывает ли такое, что код пишет какой-нибудь адрес в ЕСХ, вызывает функцию и позже читает этот адрес из ЕСХ?
>>2607396 Я не знаю, может ли быть такое, что компилятор может не учесть calling convention и не сохранить non-volatile регистры в callee. Например, потому что цепочка callee использует non-volatile регистры в качестве временных и компилятор решил сохранить этот регистр в caller или еще выше, чтобы не раздувать про и эпилоги лишними push и pop.
>>2543231 Уфф, наконец-то я осилил эту замечательную во всех отношениях книгу. Со словарем и с убунтой на виртуалке. Посоветуй, мудрый анон, что еще почитать по этой теме. Склоняюсь больше к реверс-инженерингу. Научиться читать код ассемблера.
>>2425757 (OP) Может глупые вопросы, но спросить стоит. Начал недавно изучать асм, x86-64, естестественно комп многоядерный.
При разработке в отладчике sasm видно только один набор регистров, тут и пошли непонятки: 1. Это регистры данного контекста или на вс ядра идёт один набор регистров? 2. Являются ли fasm, masm "высокоуровневыми" ассемблерами? Такой вывод опять же делаю из п1. При входе в программу нужно сохранить стек. А значит нужно не мешать пугис программам. 3. Можно ли создать поток на втором процессоре, на котором я захочу? Или об этом заботится ОС?
>>2624644 1. Контекст треда - это набор значений в регистрах. В отладчике ты видишь контекст каждого треда приложения в момент останова. Их просмотр можно свободно переключать в отладчике. Конкретный же набор регистров закреплён за хардварным тредом (Интел их называет гипертредами), а не за ядром.
2. >"высокоуровневыми" ассемблерами? Что ты под этим понимаешь?
>При входе в программу нужно сохранить стек. А значит нужно не мешать пугис программам. Ничего не понятно. Как "сохранить стек"? Зачем?
3. Тредов (которые можно "создавать") в процессоре нет. Это понятие уровня ОСи. После включения процессорное ядро просто работает - исполняют инструкции, либо остановлено в idle. В WinAPI на назначение треда на ядра можно повлиять лишь через thread affinity и/или указать предпочтительное ядро. В остальном ОС (пере)планирует треды на любые доступные ядра.
>>2626016 Ассемблер можно, макроассемблер - уже ближе к Си. Так всегда было. Можно сказать, что разделение проходит по линии - если одна мнемоника в одну машинную инструкцию, то низкоуровневый. (Алсо можно доебаться, что в обычном ассемблере MOV может развернуться в совсем разные машинные инструкции, в зависимости от операндов) А вот если появляется генерация кода, например прологи-эпилоги функций, то уже не очень низкоуровнево. Но все еще нет неявной генерации кода.
Вот такой пример, скажем, еще относится к низкоуровневым? Тут на уровне директив идет цикл .set counter,0 .rept 10 str r0,[r1,#counter] .set counter,counter+8 .endr
Который разворачивается в str r0,[r1,0] str r0,[r1,8] str r0,[r1,16] ...
>>2626517 Когда говорят про высокоуровневый/низкоуровневый, имеют в виду, что: a+b в C++ может развернуться в вызов переопределенной функции a.add(b), где может быть вообще в базу данных лезут по сети; array.map(x => x * 2).filter(x => x % 10 == 0) создаст на самом деле циклы for_each(e : array) callback(e ...) str = "abc" + "def" неявно выделит память. Даже в Си, если написать a = 3; b = 4; компилятор может переставить местами b = 4; a = 3; Ассемблер так делать не будет. Там как написал, так и выдаст. Это то, что касается генерации кода.
Дальше, то как он уже выполняется на процессоре, это дело другое. Процессор уже тоже может без спроса переставить a = 3; b = 4 даже если ассемблер не переставлял. Также, там вообще другой набор регистров, и происходит переименование регистров. Если ты пишешь MOV BX, 3 на самом деле ему дадут первый свободный регистр, например пятый, и временно дадут ему псевдоним BX. Еще уже много лет есть конвееры, например на каком то пентиуме перестановка инструкций в цикле давала прирост, потому что в одном случае они могли выполняться параллельно 3 такта, а в другом одна ждала другую и получалось 2+3 такта. А еще расставляют всякие мемори барьеры. Туда же предсказатели переходов, которые собирают статистику для if / JEQ команд и пытаются угадать, будет переход или нет. Значит, переставив местами условие a > b на a <= b, можно получить прирост.
Подытоживая: Ассемблер/Си низкоуровневый, потому что мнемоники превратятся в инструкции один в один, без перестановок и оптимизаций. Ассемблер/Си высокоуровневый (относительно какого-нибудь микрокода процессора), потому что как и в высокоуровневых языках, тебе придется перетасовывать команды местами, чтобы внутри процессора неявные команды встали так, как тебе надо, а прямого контроля над ними у тебя нет. Ассемблер/Си низкоуровневый, потому что я например пишу под старый 8 битный проц и там ничего не поменяется уже никогда. Ассемблер/Си низкоуровневый, потому что ручками надо писать больше, чем в высокоуровневых языках. Надеюсь, немного прояснил.
>>2626693 > Даже в Си, если написать a = 3; b = 4; компилятор может переставить местами b = 4; a = 3; > Ассемблер так делать не будет. Там как написал, так и выдаст. Ассемблер mips может и переставить.
Из книги Столярова узнал, что когда программа на линуксе(или не только на нем?) запускается, то в esp лежит argc, а в [esp+4*n] лежит argv[n] Вопрос к уважаемым знатокам, где в интернете об этом написано? Какая документация мне нужна, чтоб это прочитать? Пытался гуглить "the contents of the stack when the program starts" и прочее, но гугл всегда предлагал какой-то кал
>>2639903 Я сейчас после прочтения книги Дантмана открыл эту и прифигел: это называется для бегиннеров? Это какая-то каша данных про всевозможные процессоры. Прочту по диагонали, что-нибудь отложится в памяти, потом вернусь после прочтения других книг.
>>2425757 (OP) Есть одна древняя игра и отвязка от диска к ней. Носиди состоит из хакнутых екзешника и длл. Есть другая версия длл, которая добавляет в игру очень полезную функцию, но она не отвязана от диска. Тут есть кулхацкер, который сможет адаптировать носиди для этой длл?
>>2658225 >>2658219 Разница между линем и виндой только в том как ты будешь работать с системными вызовами. Сам ассемблер по сути везде одинаковый. На лине вызовы действительно выглядят проще, на винде сложнее. Но это не имеет отношения к самому асму.
>>2658922 Ты про системное низкоуровневые/высокоуровневые API ?
Я изначально писал (и пишу на сишке) в среде Windows, даже написал один небольшой kernel-драйвер, но мне очень не хватает знаний асма для реверса и более глубокого понимания архитектуры ОС и процессоров, поэтому очень приглянулась две эти книги, скорее всего я прочту обе, но начну с линя.
Нахуя пол треда сидит с асмом под 16и битные интелы? Вы чё ебанутые эту некроту дрочить? Если вам для истории, то лучше бы вакс или pdp-11 учили, ей богу. мимо амд64 насмобог
>>2658922 На сперме сисколы сами по себе вообще не задуманы для использования конечным программистом, для этого есть ntdll. Только линукс, из современных систем, предоставляет сисколы как средство для написания кода, а не библиотеки.
>>2664715 >А почему нельзя начать с 32х битного режима? Да никто не говорит что нельзя. Просто некоторым анонам проще изучать основы на старых 16 битах потому что там меньше заморочек. На старых системах можно например отрыть дебагер и вводить команды в 16-ричных кодах, сейчас так не получится. >>2664716 При очень большом желании можно и с 8-битного, но на 8 битах не было еще полноценных операционных систем и не было нормальной литературы по вкату. Изучение логики работы с циклами, функциями, данными на любом асме даст тебе понимание как кодить на любом другом асме. Большая часть понятий - стек, регистр. куча и т.п. никак не изменились со времен 16 бит. Это как изучение высокоуровневого языка. Если ты знаешь Cи, то тебе уже проще понять Java, хотя они совсем разные. В случае с 32 или 64 асмом разница будет только в том что на винде тебе еще надо будет освоить WinAPI.
>>2666875 Это тест на профпригодность для каждого юного ассемблерного кодера. Если не смог пройти этот уровень, продолжать вкатываться в асм нет смысла.
>>2667958 Тот же Дантманн пишет, что с содроганием вспоминает те 16-битные времена, когда ему приходилось работать с сегментной памятью, и нафиг ее надо изучать. Разве что для совсем уже продвинутых исследователей ради интереса. По-моему, и в 32-64 битной системе полно уровней, перед которыми от отчаяния непонимания опускаются руки и хочется все бросить. По крайней мере у меня так: разбираю ехе-шники вместе с книгой Юричева после прочтения Дантманна. Над каждым примером сижу по 2 часа, голова пухнет, но ведь интересно же.
>>2670432 >перед которыми от отчаяния непонимания опускаются руки и хочется все бросить Ну вот поэтому и есть смысл начинать с 16 бит, чтобы не плюнуть на это дело и не бросить. Насчет того что сегменты сложно - это была просто шутка если что. Нет там ничего сложного абсолютно. 32/64 намного сложнее во всех смыслах, хотя бы за счет постоянно расширяющегося набора инструкций и более сложных форматов файлов. Для сравнения COM программы на 16 битах выполняются в памяти буквально по строкам так как они написаны. Если у Дантмана и были сложности, то скорее всего это были сложности с отладкой какой-то многоуровневой логики, которую сейчас никто не будет просто писать на асме.
>>2670642 8 бит есть смысл собрать с нуля собственными руками из радиодеталей. А вот кодить лучше на 16 битах под которые уже были актуальные инструменты, дебагеры и проч.
>>2670665 8бит полностью осязаем студентотой, можно построить самостоятельно компуктер на его базе и полностью знать чо там и как. Так делали в совке с клонами 8080.
>>2670684 В старых компах процы собирали из многочисленных чипов Типа как вот пикрил на примера аудиокарты. Нагромождение этих мелких чипов, очень много. Видел у Бачило в одном из видео более детальный пример, но сейчас не вспомню в каком.
>>2670807 Ну ты в любом случае будешь паять из готовых элементов. От того что ты используешь чуть более сложную транзисторно-транзисторную логику, а не реле к примеру, суть особо не меняется. >отдельных логических элементах TTL это по факту и есть отдельный логический элемент, просто более сложный и навороченный. Можно конечно сделать процессор и из релешек, но тогда он будет работать как калькулятор по несколько минут делая математические расчеты. https://www.youtube.com/watch?v=k1hJoalcK68
>>2425757 (OP) У кого-нибудь есть нормальная версия Юричева без всех этих тупых ?? там где должны быть страницы? У него один фиг весь материал старье 00х годов, хз зачем все ищут новую версию.
>>2670952 В последней версии там сдохло всё оглавление и вместе с тем все внутрифайловые ссылки. В английской версии всё в порядке, как и в прошлогодней русской.
>>2671657 >>2671626 >>2670952 А кто-нибудь вообще понял за это время нахрена Юричев запихал в свою книгу Арм и Мипс? Не ну Арм еще ладно, но на Мипсе нет ни одного актуального проца. Нафига?? Как вы его читаете, тупо пролистываете ненужное, или пытаетесь понять код или пошли изучать основы Арма с Мопсом?
>>2671735 Да, он юзал в том числе и более современные чипы для памяти, иначе так компактно бы не получилось. Если хочешь посмотреть прям аутентичный проц на релешках, то вот здесь в серии видосов чувак делает все с нуля включая память, но конечно получается более громоздкая конструкция. https://www.youtube.com/watch?v=-ZA9Summq94
>>2671857 Ой, ну какие процессоры на элементах минимальной интеграции. Речь о том, что готовый компик студент может спаять без особого труда на 8080/з80 и учить его асм, зная, как это работает inside-out, так сказать, там игрушечные объемы даже по сравнению со современнымы мк, но это не мк, это компуктер. Ничего лучше для этого не придумали. 286 это мусор, 386+ слишком сложна. А если бы вы ещё узнали сколько клонов 8080 используются в т.н. СВО, вы бы вообще охуели. Такие дела.
>>2671966 >8080 Так это уже готовый проц, ясен перец что можно на нем собрать компухтер. Но у нас тут речь уже зашла о том как вкатиться в создание своего проца, а для этого готовые микросхемы не подходят, стоит брать хотя бы элементы уровня TTL и уже из них моделировать проц. Для совсем ленивых есть готовые тулкиты для сборки типа Гигатрона.
В чем можно удобно реверсить gba ромы? Для отладки нашел no$gba и mgba, но вот для статического анализа ничего нет. Радар неправильно выставляет базовый адрес и неправильно читает инструкции(наверное там thumb) а binary ninja вообще не загружает и плагина для гба нет. Доступа к платной иде тоже нет.
>>2660159 >Ну или что-то подобное. Например Джона Рихтера и Назара (системное программирование на языке Visual C++), Марка Русиновича (внутреннее устройство Windows), Павла Иосифовича (работа с ядром windows).
>>2670642 > Надо начинать с 8бит, есть божественные i8080/z80. Что там божественного, кроме ЦЕНЫ В 1990. Изучать асм на хуй86 мазохично, если не стоит абсурдная цель программировать вирусы и биосы. Там уродливо все, от синтаксиса да бинарного предсталения. При этом живет в рутерах элегантный mips. В каждом телебоне сидит крутой arm64. В каждом утюге два-три прагматичных кортекса-м.
>>2672961 Двочую афтора. У нас нет хороших учебников. То, что называют учебниками - это справочники. И их дохуя, потому что справочник переводить на русский язык намного лечге. Наши институты ежегодно выпускают толпы инженеров, которые умеют составлять сложные предложения, составленные из слов энциклопедий. А по факту ничего не умеют делать. В лучшем случае помигать светодиодами на ардуинке.
Вот вы говорите ИИ, ChatGPT. А я вам говорю что CD-ROM на SonyPS ведёт себя как живое существо. А ChatGPT хуйня, тупо генерирует ответ из мнения интернета.
Хоть обкурись манов. А он всё равно будет самокорректироваться так как он запроган изначально. Любое отклонение = ошибка -> корректировка и возврат на нужное положение.
>>2676286 Я давно ушел, поэтому сижу в одиночестве пожирая книги по системной архитектуре и программированию, я лишь хочу как можно больше отгородить себя от большинства людей, и возможно, если мне повезет и среди них будут адекватные инженеры, найти друзей.
Остается лишь понять, где и в каких целях использовать накопленные знания. Удивительно что ты не отреагировал на мой текст взаимной агрессией, возможно мы бы стали хорошими друзьями, но видимо не в этой жизни.
Аноны, подскажите, пожалуйста, как решить эту проблему: есть рекурсивная функция; перед вызовом самой себя создаётся переменная mov [rbp-8], 0. Я проверяю этот участок памяти ([rbp-8]), перед вызовом самой себя, и в нём содержится ноль, но, когда происходит возврат управления, то в участке памяти [rbp-8], вызывающей функции, уже содержится не ноль, а различный мусор; хотя в rbp и в rsp содержатся те же значения, что и были перед вызовом. С чем это может быть связано? Linux ... 5.19.0-40-generic #41~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 31 16:00:14 UTC 2 x86_64 x86_64 x86_64 GNU/Linux (вывод команды uname) NASM version 2.16.01 compiled on Mar 28 2023 Виртуальная машина VMware Workstation 17.0.0 build-20800274
>>2676817 А да, забыл добавить, что в вызываемой функции с этой переменной [rbp-8] ничего не происходит. Все действия с этой переменной происходят по возвращению управления.
>>2676817 >С чем это может быть связано? Что-то пишешь куда-то не туда, скорее всего. Тут нет гадалок, так что кидай код, если хочешь чтобы кто-то помог.
>>2677287 Анон, задачу я взял у Столярова, там типа строка сравнивается с образцом. Типа есть три варианта, из чего состоит образец: 1) обычный ascii символ; 2) знак вопроса; 3) символ звёздочки '*' Если в образце есть обычный ascii символ, то этот ascii символ должен совпадать с ascii символом в сравниваемой строке. Если в образце есть знак вопроса, то он может совпадать с любым ascii символом в сравн. строке. Если в образце есть звёздочка, то она может совпадать с любой последовательностью ascii символов в сравн. строке, главное, чтобы остаток образца (образец до звёздочки и после звёздочки), совпадал с остатком сравн. строки.
В этой программе всё хорошо работает до того момента, как в образце не встретится звёздочка. Но это меня пока не интересует, мне непонятно, почему в рекурсивной ф-ции после того, как происходит возврат управления, в участке памяти [rbp-8], какой-то мусор, но не то значение переменной, которое я поместил туда до старта рекурсии, хотя указатель базы и стека соответствуют тем же значениям, что и до вызова рекурсии?
привет! на связи нуб и у меня есть очень тупой вопрос на который я не нашел ответ в гугле.
знаю что есть MASM, TASM, FASM и NASM. но что это такое вообще? и с какого из них мне начать? прочел на каком-то сайте что фасм это игрушка для хакеров под вирусы и тд, а масм больше подходит новичкам и при этом на нем пишут дрова под винду.
п.с. в будущем хочу стать реверс инженегром и хотелось бы изучать сразу необходимый ассемблер из выше перечисленных.
>что это такое вообще? Собственно, ассемблеры. Язык ассемблера (assembly) - язык разметки исполнимого образа. Программа-ассемблер (assembler) проходит (несколько раз) по ASM-тексту и по этому исходнику собирает (ассемблирует) исполнимый образ программы.
>с какого из них мне начать? Ну начни с того, который в твоём учебнике используется.
>фасм это игрушка для хакеров под вирусы и тд ИБАНИСЬ, НАХОЙ
>>2677858 >в будущем хочу стать реверс инженегром и хотелось бы изучать сразу необходимый ассемблер из выше перечисленных. Во время реверс инжиниринга ты читаешь дизассемблированный бинарный код, который выплюнул компилятор или ассемблер, а в нем нет всяких макросов как в ассемблерах и всё ещё перемешано между собой будет. Лучше иди почитай reverse engineering for beginners и порешай простенькие crackme, намного больше пользы будет чем писать что-то. Можешь ещё поиграться с godbolt.org.
Аноны, как вкатиться в это дело? Хочу разбираться в архитектуре, пощупать асма примитивномуровне, но что бы прям понимание было. Есть литература совсем для даунов? Читал Таненбаума, нихуя не понятно. Особенно никогда не мог понять разрядность, системы счисления. Вроде немного усвоил, но через неделю забываю. Спасибо
>>2681203 Вообще лучше почитать все книги Касперски, у него там про вирусы полно инфы. Вирусы это часто нечто низкоуровневое типа ассемблера и они как раз через ассемблер объясняются.
>>2681323 Да, Касперски крутой чувак! Мне ещё его слог нравится, такой типа "крутой", приблатнённый и с лёгким похуизмом, прям чувствуется дух 90-х и начала 00-х. Я ещё его трюки на Си читаю, тоже очень нравится. Спасибо, анонче! Сейчас, после Ван Гуйа, приступлю к "Искусству дизассемблирования".
>>2681576 >>приблатнённый и с лёгким похуизмом, прям чувствуется дух 90-х и начала 00-х Да, этим он как раз хорош тоже. Кароче, в нашей стране любой кто прогает на ассемблере под x86 должен все его книги прочитать.
>>2678768 >>2678768 можешь, пожалуйста, еще что нибудь для изучения реверса подсказать? вот требования которые выдвинула компания в которую я хочу попасть на должность мидла и сказала что если я хочу стать стажером нужно от этого отталкиваться: понимание архитектуры винды умение работать с дизассемблером и дебаггером виндовс апи работа с сетью(сокеты, http, smb) умение дружить с компилятором и линкером принципы написания безопасного кода
если знаешь, подскажи, в интернете крайне мало информации по реверсу нашел
>>2676286 >>2685628 Слушай, а можешь объяснить или написать где прочитать о том как работает SSE технология?
Как я понимаю, суть в том, что в современных процессорах с шириной в 64 бита (80x86 intel64, amd64), существует 8-мь 128-битных регистров, предназначенных для параллельного вычисления и возможности работать с числами с плавающей точкой с обычной/двойной точностью, верно?
>>2689343 Поправочка, в SSE2 уже двойная точность имеется, но там добавлен вариант вставить за раз два числа двойной точности в один регистр против 4 чисел одинарной точности в SSE.
>>2689337 >Прочитай всю статью вплоть до примеров Уже читал и разбирал код в отладчике, просто интересно, как это выглядит на уровне архитектуры, хотелось чуть-чуть побольше про это почитать, хотя не думаю что есть в этом смысл.
>>2689358 Алсо, там ничего сложного. Ну берёт из регистра пару или четвёрку чисел, берёт ещё пару или четвёрку из другого регистра, потом складывает или делит или чё там, и срёт пачкой чисел в первый регистр или в третий. Чего там сложного. Те же операции, только сразу над пачкой данных, а не по одному.
Вот всякие конвееры в проце или ещё какая хуйня - вот там да, там заморочено всё и должно быть интересно, особенно если ты компиляторы пишешь.
Предположим, что регистры 128 бит. Тогда. Если одинарная точность, то одновременно работает группа из четырёх, грубо говря, арифметических устройств, каждое из которых работает над своей частью регистра. Первое устройство работает с первыми 32 битами первого и второго регистров, второе устройство работает со вторыми 32 битами первого и второго регистров и так далее.
Работают в одно и то же время, а не по очереди, поэтому параллельность как бе. Вот и всё.
Если двойная точность, то уже только два устройства делят между собой 128 бит. Ничего захватывающего короче.
>>2677778 Парни, а кто-нибудь читал код на пастебине? Просто интересно, почему никто не прореагировал, потому что этот постер нуб?, долбоёб?, и просто утырок??
>>2693304 Чёт мне кажется, что "Искусство программирования" это слишком фундаментальный труд, чтобы с него начинать изучение асма. Мне кажется, что к этому труду лучше подступаться, когда ты уже чутка шаришь в асм.
>>2694271 >> для линукса. А что, у линукса какой-то особенный ассемблер? Там ведь надо на компилятор ориентироваться и на архитектуру (x86-64 или arm), а не на операционку или я что-то не понимаю?
>>2694520 Ну да, я думаю, что просто нужно gcc поставить определённый флаг, и тогда получится. Вообще забей! Я чёт задал вопрос, и только после этого подумал. Здесь проще загуглить.
Может мне кто-нибудь, пожалуйста, ответить, почему во многих источниках, касающихся виндовса, говорят о том что поток(thread) что-то сделал/выделил/совершил и тд? в то время как в линуксе говорят процесс. В win же тоже процессы есть, почему выделяют конкретно поток, а не процесс, даже если речь об однопоточке?
>>2695398 Видимо, чтобы привить основы. У каждого потока же свой стек, несмотря на то, что адресное пространство общее.
Раньше ведь как было, покупаешь новый комп - и прога работает быстрее. Покупаешь ещё новее - ещё быстрее. А потом в середине нулевых частота процов замерла и начали появляться ядра. И чтобы программа работала быстрей теперь надо думать и переписывать программу под эти ядра и перед этим ещё понять будет ли паралелиться код и данные или нет. Где ядра, там и потоки. Ещё в играх это очень важно, один поток работает с графикой, а второй с аудио.
>>2695398 Что такое программа - это список команд, этот список всегда будет выполняться поочерёдно, команда за командой. То есть у тебя будет виснуть вся прога при выполнении сложной задачи. Но если ты хочешь сделать виртуализацию двух списков команд, чтобы часть проги(фронтэнд по вашему) не зависала, то это будут потоки но в одном процессе. Чё тут сложного?
>>2696271 Так читать надо немного по диагонали. С пониманием того что пишущий это человек не может ошибиться(потому что заклюют), но в реальности не хватит жизни чтобы переварить то что он написал.
>>2696305 Я интеллект и аутизм связываю, потому что у меня это выглядит так - я внешне обычнокун(наверно альфа по меркам двача), внешне выгляжу на чуть более среднего интеллекта. Но если мне попадается логическая задача которую никто не решил, я буду её решать и решу, потом своё решение автоматизирую в асме, или совместно. Раз эту задачу никто не решил, значит у меня больше интеллекта перед теми кто её не решил. Людям это не нравится, но мне похуй.
Заноза в жопе короче, диверсант, душнила. Но я уверен в том что я делаю на 100% Я и за ИИ буду топить, чтобы высокоуровневые наконец то поняли каково это вгрызаться в задачу зубами мозга.
>>2696318 >логическая задача которую никто не решил, я буду её решать и решу Может быть, перед решением задачи люди соотнесли затраты и возможные профиты, и на основании этого сделали вывод, что решение этой задачи им не выгодно?
>>2696397 Нет, интеллект - это когда ты выжимаешь из имеющихся ресурсов максимальный результат. Например, можно сделать сложный йоба-танк и проиграть войну, потому что его сложно и дорого производить. А можно наоборот наклепать много средних танков и выиграть войну. Чувствуешь разницу? Нужно конфигурировать систему так, чтобы она давала максимальный эффект, а не дрочить что-то одно до посинения. Или давай возьмем пример из ИТ сферы. Ты можешь сколько угодно оптимизировать ядро своей программы, писать самые быстрые йоба-оптимизации, ебать байты, но если огрничением становится скорость ввода/вывода, то твоя работа просто бесполезна. Ты потратил ресурсы в никуда, когда их можно было вложить в более важные вещи.
>>2696416 > но если огрничением становится скорость ввода/вывода Нет. Ты просто говоришь - я сделал, я смог, но есть ограничение скорости ввода/вывода. Если я смог, то пусть сделают так чтобы этого ограничения не было. Так интеллект двигает прогресс. Элементарно могу поставить тебе задачу - оптимизировать при помощи асма приложения на телефоне, чтобы они не выполняли ненужные команды и не садили батарею. На что теперь будешь ссылаться? А вот возьми и сделай, и будут тебе все профиты.
>>2696433 >Ты просто говоришь - я сделал, я смог, но есть ограничение скорости ввода/вывода. Если я смог, то пусть сделают так чтобы этого ограничения не было. Удачи изменить законы физики, шизик.
>>2696433 >оптимизировать при помощи асма приложения на телефоне, чтобы они не выполняли ненужные команды и не садили батарею. Современные компиляторы оптимизируют код лучше мясного мешка. Либо разница настолько минимальна, что не стоит влоюенных в это ресурсов.
Ну а вообще понятно, что ты квадратно-гнездовой шиз с манией величия.
>>2696457 Тогда зачем глупые инженеры там с какими-то шинами данных ебутся или скоростью записи/чтения на носитель? Иди и расскажи тупым, что все проще.
>>2696465 Ты их превозносишь выше себя? В чём суть? Бери и ебись сам. >>2696462 Ага. Потом мечтатели выкатывают ёбу и ты делаешь вид как-будто бы не заметил.
>>2697681 авотхуй, вчера стукнуло 30 и последний месяц руки чешутся написать что-нибудь для NES. Есть в этом своя лампота. Пересмотрел вдобавок кучу каналов по ZX Spectrum и Commodore 64
Добрый вечер, аноны. Очень удивлён, что тред жив, а последние ответы даже не датируются прошлым годом. Видел этот ваш асм ещё в конце 80-ых, когда учился в ГДР. Коллеги из совдепии, разумеется, тоже с этим работали, но мне в те времена едва 17 стукнуло. К сути, насколько сильны изменения за эти ~35 лет? Я помню базу, но ввиду моей специализации в данный момент резко возникла потребность в углублённых знаниях. И тут уже либо я берусь самостоятельно за определённую работу, либо мой пирог кусает человек, который знает и умеет, чего не очень хотелось бы. Да и где в наше время найти нужного инженера? Алсо, если здесь есть люди, которые ищут работу и имеют разрешение на работу в США, то я могу вам сделать интересное предложение.
>>2703429 Тогда он был нужен именно для разработки, сейчас больше для реверса, так что подходы другие в плане знания компиляторов и прочего для анализа.
>>2696388 Я проверил, ты не прав. Как выглядит свиду среднесложная задача - ты примерно оцениваешь сроки, начинаешь делать. А потом подводные, всё усложняется, после этих подводных новые подводные. Если уже начал, то надо заканчивать и(барабанная дробь) заканчиваешь. Это охуенно. А предварительная оценка это философия, будет 0 на входе - 0 на выходе. Так всегда и будет.
>>2696305 >А чего такого в асме интеллектуального? Интеллект это очень просто - когда у человека есть личность. Нет личности - нет интеллекта. Когда есть личность, есть интересы ей свойственные, личные интересы человека. Интеллектуальный человек делает вещи нужные ему, не оглядываясь на окружающих: что там легко, что там прибыльно, что там трендово, это всё ничего не значит, потому что лень, алчность и подверженность внешнему влиянию это стандартные инстинкты животного, а значит не могут быть интеллектом, ибо у животных его нет, соответственно человек с такими интересами не может быть интеллектуальным.
Так вот, возвращаясь к ассемблеру, это не легко, не прибыльно и не трендово, значит человек занимается под влиянием своей личности, т.е. интеллекта, поэтому ассемблер это интеллектуально. Тут ты можешь сказать, что подверженность внешнему влиянию бывает и наоборот - быть не таким как все и поэтому заниматься ассемблером, но с ним это не работает. Одно желание быть никакусиком слишком слабая мотивация, в данном случае не потянет. Нитакусик это лишь внешность, а для внешности есть куда более простые вещи, чем ассемблер.
>>2696305 >В 80х все на них писали Да. >, потому что ничего другого не было. Нет, было. Причина не в наличии или отсутствии языков, а в производительности. >Асм был мейнстримом. Не был, потому что в 80-х компьютеры в принципе не были мейнстримом.
>>2713643 Ну хорошо. А что ещё формирует личность, кроме ассемблера? С ассемблером понятно, а вот что ещё? Даже представить боюсь как до 20 века жили без ассемблера, мы счастливчики, что застали его и пишем на нём.
>>2713649 >>Не был, потому что в 80-х компьютеры в принципе не были мейнстримом. Ты в курсе с чего началась история ПК? Как раз с Commodore 64 и ZX-Spectrum, котороые как раз в 80-е появились, в начале
>>2713687 >Даже представить боюсь как до 20 века жили без ассемблера Подтирали жопу занавеской, потом решили включить мозг и начали изобретать всякие лампы накаливания(это тоже можно назвать ассемблером, принцип тот же).
>>2713687 >А что ещё формирует личность, кроме ассемблера? Личность формируют твои родители своими генами. Если родился с личностью, она будет и будут интересы, а если нет, то и нет, остается только дебильный каргокульт, имитация, как спрашивать какие очки лучше формируют ум, ведь умные как правило в очках, верно? Нет, дебил, не ум от очков, а очки от ума. Так же и с ассемблером, не ассемблер формирует ум, а ум формирует интерес к ассемблеру. А в обратную сторону это не работает.
>Ты в курсе с чего началась история ПК? Ты в курсе значения слова "мейнстрим"? В 80-е, компьютеры не были мейнстримом, никто из обычных людей про компьютеры даже не знал и знать не хотел, всем было насрать. Компьютерами занимался один из сотни или даже из тысячи. Поэтому не важно на каком языке это происходило, программирование хоть на бейсике, хоть на ассемблере было одинаково уникальным занятием для умных с личностью, а значит интересами, иначе просто не было причин трогать компьютеры, они никого из обычных людей и не интересовали.
>>2714206 Какой же лол! Раз чем-то занимаются всего лишь единицы, то это ебать интеллектуально получается. Всё-таки интеллект лучше поискать в решениях сложных задач по геометрии и пиздатой поэзии.
>>2715571 >Раз чем-то занимаются всего лишь единицы, то это ебать интеллектуально получается. Дело не в количестве, а в мотивации - ЗАЧЕМ делаешь. И тут всё просто, массовые занятия это не личная воля личности, а влияние массы, тупое стадо, интеллекта нет. А редкие занятия уже могут, но конечно не все они делаются из за личной воли, поэтому нужно рассматривать конкретно.
>Всё-таки интеллект лучше поискать в решениях сложных задач по геометрии и пиздатой поэзии. Это ум, сообразительность, а не интеллект. Умным, сообразительным могут быть и животные, но интеллектуальными - не могут.
>>2714206 кстати, комплюктеры уже не мейнстрим: я недавно видел в каком-то мануале фразу типа "вот этот пункт нужно делать на компьютере, а не на телефоне, поэтому если у вас нет компьютера, visit a public library" мимокрок
>>2719513 Хоть и не в тему, но смешно, да. Компьютеры зафорсили, но они изначально не были никому нужны, вот баланс и возвращается в исходное состояние - ненужности.
это не легко, не прибыльно и не трендово, значит человек занимается под влиянием своей личности, т.е. интеллекта, поэтому помойкинг это интеллектуально.
Тут ты можешь сказать, что подверженность внешнему влиянию бывает и наоборот - быть не таким как все и поэтому заниматься помойкингом, но с ним это не работает. Одно желание быть никакусиком слишком слабая мотивация, чтобы рыться по завалам гниющего воняющего дерьма в поисках чего-то прекрасного. Нитакусик это лишь внешность, а для внешности есть куда более простые вещи, чем ходить по разлагающимся отходам, переступая крыс. Интеллект, личность — вот что главное. Интеллект и личность.
Заглянул в код одного линуксового ядра (x86-32) и встретил там непонятную вещь. Там присутствует функция, которая состоит из ничего. ret и все. Судя по тому, на скольо часто она используется, это что-то вроде всяких __x86.get_pc_thunk.xx Но я пока так и не могу понять, какую информацию можно извлечь таким прыжком туда обратно. Вызывается она в самом начале после сохранения регистров в стек. И упоминаний чего-то подобного толком найти не могу. Одно упоминание встречал, но там это вроде как выдавал IDA а не gcc. И там народ говорил, что возможно это даже ничего не значит. Компилятор, что-то недовыкинул.
>>2748569 >>2748616 >>2748625 Также можешь использовать маску и операцией енд сравнивать последний бит, сдвигая вправо один бит, если он равен единице, то это нечётное число, это этот бит равен нулю, то это чётное число. Тебе нужен флаг переноса и прыжок на вывод по условию, когда этот флаг равен единице.
>>2748569 >>2748616 >>2748625 >>2748628 >>2748629 Кста, можешь и маску использовать, которая равна, допустим 00000010, если будешь сдвигать влево на один бит свой счётчик и сравнивать его с маской операцией энд. Если равно, то прыгай на вывод, если не равно, то в начало цикла.
Простите, ребята, что так много написал, чёт туплю сегодня!
Тут используется ф-ция printf языка Си для вывода чисел на экран, просто, если пользоваться средствами ОСи, то заебёшься выводить числа, плюс этот код я писал в линуксе (убунту 22.04), поэтому, чтобы его скомпилить тебе придётся создать makefile, в котором можешь создать связь (у меня исходник называется out_arr.asm, у тебя как будет я хз, поэтому в этой связи поменяй out_arr... на название своего файла): out_arr: out_arr.o gcc -o out_arr out_arr.o -no-pie out_arr.o: out_arr.asm nasm -f elf64 -g -F dwarf out_arr.asm -l out_arr.lst (-l out_arr.lst можешь вообще не указывать) Чтобы исполнить программу, запускай out_arr. Ещё тебе понадобится компилятор gcc: sudo apt update && sudo apt upgrade sudo apt install gcc
Если тебе нужен код под винду, то, извиняй, я тут не знаток.
>>2771819 >Каждый проц имеет свои собственные сокращения к действиям с регистрами? Тебе лучше начать с другого: гугли "Instruction Set Architecture", потом посмотри как команды процессора реально устроены на бинарном уровне для разных архитектур, например у Z80, ARM, x86. После этого вопросы про ассемблер отпадут, я надеюсь.
Вопрос к обмазывающимся fasmg коданам: в CALM инструкции как-то можно проверить, существует ли некая переменная? Короче, интересует CALM-эквивалент простого макроса на первом пике - такое в CALM можно запилить? То, что я напидорасил на пикрелейтеде 2, работает только с символьными переменными, т.е. pizda equ 1 детектится, а pizda = 1 нет. А надо, чтобы детектилось.
Решил я убить двух зайцев: изучить основы Python и, дизассемблируя упражнения, попутно изучать методы реверс-инженеринга. Написал одну строчку "Print("Hello, World"). Скомпилировал. Получился файл размером 1MB! У вас всегда так? Загнал exeшник в Иду и не нашел, где выполняется эта команда. Я не нашел в памяти даже строку "Hello, World". Это что за компилятор такой? Походу гиблое дело. С С++ до этого как-то проще было.
>>2787458 Алло, товарищ, у Питона своя виртуальная машина, которая исполняет байт-код. Так что в ассемблере ты получишь нечто пережёванное: эту машину и где-то ещё должен быть байт-код твоего хеллоувордла. А строку ты не можешь найти потому, что там вполне может юзаться другая кодировка, отличная от ASCII и UTF8, где один символ кодируется двумя байтами, а не одним.
>>2787760 Ну тык я ему и говорю то же самое. Он наверно посчитал, что раз получился экзешник, то значит его питонский скрипт скомпилировался как код на Си или плюсах.
>>2787760 А я-таки нашел, лул. Строка появляется в самом конце выполнения exe-файла, причем каждый раз появляется в совершенно разных адресах памяти. Есессно я абсолютно не понимаю как и откуда она появляется.
>>2790304 >>Есессно я абсолютно не понимаю как и откуда она появляется. копай исходники той утилы, которая захуячила тебе это всё в exe, там и поймёшь сразу как и откуда
Если хочешь сделать более-менее нормальный ассемблер с константами, макросами, структурами и прочим, то дрочи парсер. Книга с драконом или какие-нибудь статьи про парсеры/лексеры для языка на котором ты будешь делать ассемблер.
Для генерации кода лучше начинать с ассемблера для intel 8086. 16-битного. Делай com-файлы, чтобы не пердолиться с линковкой.
>>2791200 Ты уверен, что не путаешь полиморф с метаморфом? У полиморфа вирусное тело тупо шифруется и все. А дальше добавляется код расшифровщика тела вируса - декриптор - сгенерированный полиморфным движком под конкретную копию вируса. В него-то и засовываются мусорные инструкции, а не в тело вируса.
Решил навестить сайт дядюшки Пирогова (http://asm.shadrinsk.net) спустя много лет, однако потерпел фиаско. Есть какая-нибудь инфа по его сайту? Переехал на другой домен? Жив ли он вообще?
>>2790932 Куришь описание самого простого процессора, вроде c18. Пишешь цикол, читающий строку за строкой. Сравниваешь начало строки с названиями инструкций. Сравниваешь остаток строки с операндами. Пишешь код в текущую ячейку массива. Потом добавляешь метки. Метку и ее адрес надо хранить в словарике. Потом решаешь проблему ссылок на неопределенные метки, это довольно просто.
Аноны, посоветуйте, пожалуйста, хороший дебаггер под линукс, а то я чёт сейчас разочаровался в Cutter на основе radare2, потому что он не может в отображение регистров, которые используются в simd инструкциях. Вобщем, юзал ddd, sasm, edb и Cutter (который очень крутой для дебага, дизассембла, и т.д., но чёт сейчас прям руки опустились, когда не смог настроить его на отображение xmm и mxcsr регистров, бред какой-то, такой мощный функционал, а в отображение всех регистров не может).
>>2790304 Понемногу проясняется, анон. Оказывается, в Питоне нет переменных, там создаются объекты с несколькими полями: тип переменной само значение переменной и количество ссылок на этот объект. 2 - это, наверное, тип - строка. Где же тогда количество ссылок?
>>2809219 >>Оказывается, в Питоне нет переменных, там создаются объекты с несколькими полями: тип переменной само значение переменной и количество ссылок на этот объект. С подключением. Это знают все, кто на нём программируют, потому что они читали мануал.
>>2809296 Ты хоть почитал, как это всё работает? Отдельный парсер и коньпелятор берут текст скрипта, пережевывают его и висирают говно, которое потом жует вм. Т.е. ты трассируешь саму вм, которая выполняет говно и видешь её стейт. В этом нет никакого смысла. Тем более, что исходники открыты.
>>2809356 Я просто хочу видеть, как работает код. Например, вот в куче выделяется память, вот туда помещается строка, вот в стек помещается адрес строки и вызывается процедура и так далее. С С++ до этого было абсолютно наглядно. Здесь я нихера не понимаю, что происходит. Где появляется это "говно" лол? Как оно выполняется? Ты прав, анон, я ничего не читал, поскольку не программист. Потихоньку читаю, когда есть свободное время.
>>2809448 Это конечный автомат, который выполняет байт-код. Он одинаковый для всех скриптов, меняется только байт-код, который и есть результат переваривания скрипта. Можно просто развернуть его обратно в читабельный формат, а не трассировать исполнителя.
>>2809640 Да это пиздец тупая задача. Никто бы не стал заниматься тем, чем ты занимаешься имея на руках исходники. Обычно такой хуйней занимаются хакеры, чтобы снять виртулку защиты от копирования с видеоигры. Там от этого хоть какой-то толк. А тут ты только будешь переоткрывать то, что в документации написано на самом видном месте. Смысл? Вообще рекомендую залипнуть на всякие crackme. И полезней, и интересней будет.
>>2810469 Как будто крякеров новичков не бывает. Не все же денуво ломают. А на ресурсах сидят ебнутые быдланы (рунет), либо полуграмотные индусы (англонет), двачеров я там не обнаружил.
Сап, не особо надеюсь на ответ, но что уж, чудеса случаются (нет). Почему в стек трейсе андроида (логкат) после краша в регистрах какой-то рандом, не имеющий отношения к моему приложению? Дальше идет бектрейс, там вроде бы нормальные адреса, но сверху какой-то рандом.
>>2818478 Пробежался быстро, но увидел много годных вещей. Я сам давно хочу разреверсить Conflict: Desert Storm, ибо это моя первая игра на ПК. Но хуй там, времени нет, сейчас читаю книги по сетям и TCP/IP, обходы внуренних и внешних блокировок, пишу сетевое приложение... Короче, времени нет.
>>2818651 Повертел несколько вариантов в голове, но они не подошли по логике ситуации. Действительно, хуй его знает. Желаю скорейшей разгадки.
Чему я научился за время существования треда: 1 Полностью расковырял Valkyrie Profile для перевода, написал инструментарий, написал архиватор который делает архивы с указанным размером. 2 Могу делать с локальными файлами всё что угодно, уже пригодилось на работе. 3 Написал парсер с авторизацей(просто подставлешь куку и парсишь) 4 Могу в OpenGL, тут уже больше геометрия рулит. Этим сейчас буду заниматься.
>>2819740 >>Могу в OpenGL, тут уже больше геометрия рулит. Этим сейчас буду заниматься. >>тут уже больше геометрия рулит и линейная алгебра. Геометрия, причём проективная, там разве что по поводу проецирования 3D мира на 2D плоскость для показа на экране.
>>2821475 Нафига тебе ресурсы? Просто скачай эту прогу (x64dbg, она бесплатная), и открой в ней экзешник, который ты ковыряешь. Она сама декомпилирует и всё. Там русский язык есть. Правда, чтобы что-то увидеть надо точки останова поставить в настройках, типа "на старте". и ещё там есть "при загрузке dll" и прочие. Русский язык есть, разберёшься. Стрелочки о переходах показываются сразу и без выставления галочек. Желаю приятного дизассемблирования.
>>2821482 Я через IDA pro пытаюсь поймать адрес нити в одной новой игре, там адреса каждый раз меняютсянет, не делаю читы. Пытался отследить функцию, которая её меняет, поставив debug trace - нихуя не понятно. Хотелось бы спросить у знающих людей что делать конкретно в моей ситуации.
>>2821492 Походу тебе несколько лет придётся втыкать в базу, а потом уже через год легко сообразишь как тебе найти твой адрес. Может даже найдёшь его весьма экстравагантным способом, потому что будешь больше знать тупо, пушта можно что-то искать в лоб, а можно исхитряясь, зная базу.
Короче, удачи. Насчёт специализированных материалов - книги Криса Касперски в помощь. Ещё в книгах бывают списки использованной литературы - её тоже можно читать.
>>2821373 По идее должно происходить. Я шел с конца: выводе строки у вас триал версия и дошел до этих вызовов. >>2821381 Спасибо, анон, попробую. Похоже на ollydbg.
Посоветуйте книги про то, как работают современные процы. Что содержит микрокод, как аллокация регистров происходит, как проц режимы переключает как работают кеши данных и инструкций и т.д.
>>2823855 Кстати, рекомендую также читать X86-спецификации от AMD. Мне гораздо больше нравится их описание системы команд в общем. Стиль более литературный. Читается интереснее.
Для въезжания в 3D, матрицы там, вектора, кривые - рекомедую эту книгу. Не надо смотреть на OpenGL в названии, тут главную роль играет слово Mathematical. DirectX то же самое, просто функции API называются по-другому.
>>2827426 никакие, программа на асме - это всё, сразу сто детектов, гроб гроб кладбище и далее по списку. не хочешь, чтобы антивиндусы ругались на твою простую программу - пиши на C#
>>2827553 Так и есть. Любое отклонение компоновки исполнимого модуля от - высранной одним из популярных компиляторов, распознаётся как вирусная сигнатура . До чего мы докатились, мля!
>>2827670 >>Любое отклонение компоновки исполнимого модуля от - высранной одним из популярных компиляторов, распознаётся как вирусная сигнатура вот ета лал прихуел когда прочитал
>>2827426 А нельзя в список доверенных добавить или как? Или типа у твоих клиентов антивирусы распознают твою прогу как вирус и ты уже не знаешь что делать?
>>2827964 >Или типа у твоих клиентов антивирусы распознают твою прогу как вирус и ты уже не знаешь что делать? Типа того. Ну и как бы нахуй надо, доверие же сразу падает, приходится доказывать что не верблюд. Они же нихуя не понимают, как им объяснить.
>>2828544 ну шо, надо будет разреверсить на асме и откомпилить любым компилятором. В main прописать переход на точку входа. Только так походу. Надеюсь исходная прога адресно независима и её можно вставлять хоть куда.
>>2425761 Попробовав программировать на ассемблере эльбруса (ну то есть не прям на ассемблере, а используя команды вместо сишных операторов) получил по итогу замедление по сравнению с сишным кодом в 4ре раза.
Разгадка проста - я не учитывал длинну конвеера, как мое раздутое говно в него и кэш помещается и прочее межпроцедурное взаимодействие с учетом инлайна, я просто тупо оптимизировал код отдельных функций с циклами и получил хуйню, даже не смотря на то что обмазывался весь simd -ами и кучей регистров, получил медленную хуйню. Возможно ещё использование самого simd наоборот добавляло даже некоторые накладные расходы и даже оверхэд.
В общем если из интелов и армов убрать эти ваши фронтенды которые тупо бъют ваши команды на микроопы и разруливают вопросики с подкачкой кода, алокацией регистров, конвеером и задержками в рантайме, то вот это будет программирование на языке машины (ассемблере), а так это как и в моем случае тупо программирование в коммандах. Просто в моем случае всем перечисленным занимался компилятор (дай бог ему здоровья что он несмотря на асм-вставки все видит и понимает), а у вас микрокод в процессоре.
>>2830882 >языке машины (ассемблере), а так это как и в моем случае тупо программирование в коммандах Что за бредни? Ассемблер - не язык машины. Да и нет никакого "языка машины". Есть набор команд (это не язык). Программа состоит из инструкций (команды кодированные с операндами) и прочих (неисполнимых) кодов. Как ты намереваешься программировать на каком-то там "языке машины", не используя архитектурные команды?
>Просто в моем случае всем перечисленным занимался компилятор (дай бог ему здоровья что он несмотря на асм-вставки все видит и понимает), а у вас микрокод в процессоре. Видимо, такую галиматью себе мыслят все пишущие на ЯВУ. Земля им пухом.
>>2831089 Ну во первых язык у машины есть (маш.код). И даже на эльбрусе машкод не исполняется напрямую, а проходит через фронтенд, просто этот фронтенд являет собой буквально первые стадии конвеера на которых декодируется только сам бандл (широкую команду), подготавливаются операнды вычисляются адреса перехода, а команды в нее запиханные по сути уже микроопы интела.
У интелов и армов (уровня эпл м1) фронтенд полкристала занимает, потому что им мало того что надо дополнить входной код дополнительными хуевинами (в интеле еще и разбить сами x86 команды на простые микроопы) так еще и перестраивать последовательность исполнения чтотбы конвеер не пустовал. И конечно переалоцировать регистры с "архитектурных" (как интел их называет) на физические.
В эльбрусах все это вынесено в сам ассемблер/машкод, что с одной стороны дает полный контроль над железом компилятору и программисту, а с другой лишает некоторых рантайм-возможностей. Ну и руками на ассемблере (именно не в командах а в ассемблере с распредилением регистров) ничего качественно хорошего уже не напишешь.
>>2831220 >Ну во первых язык у машины есть (маш.код). Я же уже тебе написал. Это не язык. Чем быстрее ты отбросишь эту старую протухшую метафору о каком-то там "машинном языке", тем быстрее начнёшь понимать машину.
>ассемблер/машкод Ну и зачем ты их путаешь? Ассемблер не является машкодом. ВООБЩЕ НИКОГДА.
>машкод не исполняется напрямую А должен?
>ничего качественно хорошего уже не напишешь Говоришь за себя.
Реверсач, я все волосы на жопе выдрал. Может ты подскажешь. Короче, смотрю на ютубчике ролик с разбором PE с нуля. Чел загружает в IDA экзешник как бинарный файл и пошагово создает структуры, входящие в заголовок. На первом скрине то, что у него получается после создания IMAGE_NT_HEADERS. На втором - то, что получается у меня. Вопрос: почему у него IDA показывает адрес каждого поля созданной структуры, а мне для всех полей показывает один и тот же адрес, соответствующий началу структуры? Как сделать так же, как у него?
>>2847459 Точно не знаю, но у меня есть предположение что, может это потому что чел задавал каждое поле по отдельности, не объявляя одну большую структур. А ты сделал как раз одну общую структуру с полями, поэтому отображается ее адрес начала.
>>2821702 >Посоветуйте книги про то, как работают современные процы База: Паттерсон Хенесси Количественный подход, Жан Поль Шень, Лапасти Modern Processor Design: Fundamentals of Superscalar Processors >микрокод Микрокод - это прошлое, сынуль.
>>2854288 В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (RE).
Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда. Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.
Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.
Инструменты для RE: Дизассемблеры: 1) IDA Pro Torrent Edition 7.2 | 7.0 | 6.8 на выбор. Иногда ограничения версий x86/x64, патчинг, вылеты прилагаются 2) IDA Freeware 7.0 - бесплатная для некоммерческого использования Важные функции/процы/форматы не завезли, саппорт все обращения ксорит побайтово. 3) IDA Home - тем, кто реверсит для хобби 365$ в год, ага. Умеет на выбор PC|ARM|MIPS, обычные и х64. Завезли IDAPython, но забыли Decompiler. 4) Ghidra - главный конкурент IDA Pro, разработка NSA под свободной лицензией. Тормозной Java UI, гипотетические звездно-полосатые анальные зонды в комплекте. 5) Radare 2 | Cutter - консольный + гуй на Qt дизассемблер. Умеет в Ghidra decompiler. Предположительно нужен только клиническим, не умеющим в скачивания торрентов, пользователям альтернативных ОС. 6) Hiew - Hex-редактор и легкий x86|64|arm дизассемблер за копейки. AV-ресечеры текут, вирьмейкеры боятся, поклонники st. Криса грят малаца. 7) Остальное
Отладчики: 1) x64dbg - х86/64 юзерспейс виндовый отладчик с открытым кодом не Olly же в 2020, верно?; 2) WinDbg - родной виндовый дебаггер от MS 32/64 битные приложения, драйвера, анализа аварийных дампов - это все к нему;
>>2847577 По асму документация есть К самим эльбрусам дают удаленный доступ. Вот на этом сайте http://элбрус.рус документация лучше всего оформлена, в ней команды находятся поиском.
Алзо на его голом ассемблере писать не реально, но можно писать на си используя беззнаковые переменные типа uint64_t uint32_t и команды через асмвставки. У них в файле интринсиков есть макросы типа TWO_OPERAND_CMD(op, src, dst) Можно их использовать вписывая команды. Дело в том что у него сложная алокация регистров которая задается при входе в процедуру и при передаче аргументов, с ней моск не справится лучше доверится компилятору да и расфасовыванием микрокоманд он тоже лучше справится, благо это с ассемблерными вставками работает тоже, то есть он их тоже группирует и раскидывает по широким инструкциям.
Не знаю где спросить, может тут подойдет. Помню контекст. Русский. Закончил написание полного курса по информатике для школы. Там 2 или 3 года, каждая в 2 или 3 частях. Новое издание продается, а прошлое выложено у него на сайте.. курс вроде более менее современный, затрагивающий матчасть. Закончил его полностью вроде относительно недавно. Может кто по таким вводным вспомнить/опознать автора?)
Ну и чего не робит? Столяров писал, что NASM заменяет то что находится в квадратных скобках на адрес. Адрес - четыре байта. Почему он не хочет записывать в mrk dd адрес метки adr?
>>2897002 А, всё понял. Сама метка adr уже является адресом. Тут скобочки не нужны. Похоже что скобки нужны только для того чтобы в регистры адреса записывать.
>>2830882 >В общем если из интелов и армов убрать эти ваши фронтенды которые тупо бъют ваши команды на микроопы и разруливают вопросики с подкачкой кода, алокацией регистров, конвеером и задержками в рантайме, то вот это будет программирование на языке машины (ассемблере), а так это как и в моем случае тупо программирование в коммандах. >Просто в моем случае всем перечисленным занимался компилятор (дай бог ему здоровья что он несмотря на асм-вставки все видит и понимает), а у вас микрокод в процессоре. Зумер-дегенерат не палитсо.
>>2915680 Он очень криво объясняет, но суть понятна, и в общем все так и есть. У Эльбруса действительно фронтенд очень простой, и каждая широкая команда - это фактически то, что приходит на исполнительный модуль. Основная засада в том, что бранчи и простаивания конвейера из-за доступа к памяти предугадать невозможно, и тут OoO процы рулят, потому что могут выполнять другие команды, не дожидаясь данных из памяти, или даже переключиться на другой поток гипертредингом.
>>2916095 Про планирование - это буквально yep_it's_wood.jpg, про остальное кринж. >>2916103 >Asm — это когда ты тратишь по неделе, чтобы написать Hello World Есть такая книжка в нескольких томах "Искусство программирования", там все алгоритмы на асме, упражнения с написанием програм требуют в среднем 20М.
>>2847520 Заметил, что исчезла та самая сцена? А куда она делась? Правильно.заметил, уже n месяцев не могу найти реверсеров наверное, не там ищу неплохо бы.
>>2831220 Ну да, я думаю, что просто нужно gcc поставить определённый флаг, и тогда получится. Вообще забей! Я чёт задал вопрос, и только после этого подумал. Здесь проще неуместное желание внимания + отсутствие такта. Такая фантазия может быть желанной и привлекательной для многих парней, но это точно не изображения "абсолютной покорности", потому что она постоянно пропускала мимо ушей призывы покинуть комнату гг + достаточно остро рофлила с его любимых крабов загуглить.
>>2921580 Мне сишнику и крестовику без опыта работы предлагали пойти в дебаггеры и заниматься дизассемблериванием. Я тогда день потратил чтобы понять что нормальных бесплатных дизассемблеров нет и ответил отказом. Сейчас сижу учу ассемблер по видосикам.
Аноны, чёт я ничего не понимаю! Можете объяснить как это работает?
1-й пикрил: отправляю в стек шестнадцатеричное число 0x1122334455667788.
2-й пикрил: в цикле достаю из стека значения и складываю их в rdx, т.е. в первой итерации к rsp прибавляю 7 и получаю первые две единицы числа.
3-й пикрил: во второй итерации к rsp прибавляю 6 и получаю 1122? Почему 1122, а не 22? То, что в rdx могло остаться значение 11 исключается, т.к. в каждой итерации цикла я обнуляю rdx.
4-й пикрил: в третьей я прибавляю пять и получаю 112233? Почему 112233, а не 33? ... И так до конца цикла, т.е. на последней итерации я прибавляю 0 к rsp и получаю уже всё это число 0x1122334455667788.
Собственно вопрос: как происходит размещение этого числа 0x1122334455667788 в стеке?
>>2929250 Не, меня не порядок размещения интересует, а почему, когда я прибавляю к стеку некоторое смещение, допустим, что к rsp я прибавил 7, и получил 0x11; но, когда я к rsp прибавляю 6, то я получаю не 0х22, а 0х1122.
Всё, аноны! Я разобрался! Нужно просто нужный размер данных брать из стека (пикрил 1). А вообще, смотрите какой прикол (пикрил 2): получается, что, если не указывать размер данных, который нужно взять из стека, то rsp будет указывать на данные до дна стека, который был выделен для программы. Получается, на пикриле 2, что смещение rsp + 6 указывает на 0x1122, которые были запушены с rax, и на остальные 0х334455667788, которые были запушены с rbx.
Хочу начать изучать ассемблер для общего развития. Но не знаю какой изучать. Сижу на линуксе так что MASM отпадает, а вот какой из NASM, FASM или GAS выбрать я хз. Помогите с выбором.
>>2930565 Хз, мб я неправ, но все книги, которые я встречал по асму, и которые также с упором в Линукс, везде употребляется NASM. А вообще без разницы какой асм изучать, ты главное с синтаксисом определись, да и даже это не особо важно, ибо можно привыкнуть и к интеловскому синтаксису, и к AT&T, и GAS, и т.д. Всё это об одном и том же, но не с небольшими отличиями. Так что всё зависит от лит-ры. Для вката тебе подойдёт Ван Гуй, он кодит на NASM в Линуксе.
>>2930646 Ну, можешь и по этой книге из шапки вкатываться, наверное, она даже круче Ван Гуйа, потому что тут уже современное издание есть: Assembly Language Step-By-Step - Programming with Linux Jeff Duntemann
переписал кажись правильно, прога даже выдаёт ответ "571" но потом ошибка сегментирования сразу. FASM сам код https://www.ideone.com/Hb6kMK (там код не запускается)
>>2932039 Мне кажется, что еxit коряво организован. Системный вызов под номером 60 завершает прогу. Не знаю, как в FASM, но в NASM выход так организовывается: xor rax, rax xor rdi, rdi mov rax, 60 mov rdi, 1 syscall
>>2932502 ваш вариант ничего не изменил, зато я научился пользоваться SASM это типа иде. Так там заметил что похоже проблема в том что не останавливается вывод символом после окончания строки. Три символа выведены правильно потом похоже читает дальше по памяти, пока не доходит в область закрытую для проги. Мои знания ещё слишком слабы чтобы понять где ошибка
>>2934077 >ваш вариант ничего не изменил >mov rdi, 1 Вот тут поправь на ноль, либо лучше вообще эту команду убери. Я чёт вчера лиху дал с единицей. Прога должна вернуть ноль, если нет ошибок. Ну да, похоже, что он дальше идёт. Хотя, по коду что-то невидно каких-то явных ошибок. Советую тебе в том же SASM продебажить код. И понаблюдай за регистром rcx, мб, из стека какая-то хрень возвращается, возможно, что значение не того регистра возвращает и стека, т.е. либо более ранее, либо более позднее значение.
>>2934077 >>2934177 У тебя в ф-ции print_char, при выталкивании из стека значения rcx, rcx возвращается неверное значение, точнее оно чередуется, то 10, то 3, т.е. в первый раз выталкивается значение 10, а потом уже 2, как и должно быть после вывода первого символа. Ты должен знать, что системные вызовы изменяют rcx, и почему-то не всегда тут помогает стек. У меня тоже постоянно гемор с rcx после системных вызовов, поэтому советую значение rcx сохранять в другой регистр (выбирай что-нибудь из r8-r15) перед вызовом системных вызовов. После вызова уже обратно присваиваешь rcx значение из регистра. Либо вообще для счётчика можно использовать другой регистр (но это не есть хорошо, ибо принято в мировом сообществе, что rcx выполняет роль счётчика). Также в SASM наблюдай за rsp, так как у тебя много вызовов ф-ций, поэтому, под конец проги, стек может съехать, а, если ты его не выравниваешь перед возвратом, то может также произойти Segmentation fault.
>>2941416 подскажи как добавить исходный код к коду программы ато: Reading symbols from ./main2-3... (No debugging symbols found in ./main2-3) (gdb) step The program is not being run. (gdb) backtrace No stack. (gdb) b No default breakpoint address now. (gdb) run Starting program: /home/vitumn/asm/cryptofun/main2-3 571 Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) b Breakpoint 1 at 0x0 (gdb) step Cannot find bounds of current function (gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) y
>>2943036 Зачем тебе этот gdb? Ты шиз, что ли? У тебя же есть SASM в нём и дебажь! В гдб пиздос как неудобно дебажить, особенно когда нужно следить за регистрами!! И особенно, когда ты ничего не знаешь про гдб и только вкатываешься в асм!!! Это пытка, шо пиздос, дебажить в твоём положении асм код в гдб.
>>2932039 У тебя в функции print_char не в том порядке выталкиваются регистры из стека. Ты сохраняешь их: push rax push rbx push rcx push rdx
А потом восстанавливаешь pop rdx pop rbx pop rcx pop rax
pop rbx и pop rcx поменяй местами и все заработает. Вообще алгоритм очень замороченый, чуть моск не сломал пока разобрался. И зачем на каждую функцию отдельная секция?
>>2945729 >Я так свой игровой движ на несколько тыщ строк C++ дебажил, впервые юзая gdb. Ты жоский тип! Но это разные вещи, когда чел совсем не сечёт в языке программирования, и когда чел пишет уже свой игровой движок.
>>2945729 >C++ дебажил он легко дебажиться в любом идэ, без особых сборок. А тут на асме во первых синтаксис разный интел или ат ат, во вторых компиляторы разные, я сейчас уже учусь по книжке с интел под виндой, а пытаюсь собрать это на линуксе fasm-ом и gas-ом
>>2949215 епта, так в линухе gas по умолчанию, как настоящий преемник уникса, юзающий AT&T синтаксис, но который можно поменять на гейский синтаксис то ли в самой .s файле, то ли флагом компилятора. AT&T-синтаксис по моему норм, я на нём raspberry pi (aarch64/ARM64) кодил. Вполне успешно. Ладно там компиляторы разные (хотя есть дефолтный gas), но что вы так кипишуете из-за синтаксиса не пынямаю: либо юзай дефолтный, либо пытайся включить нужный. Йа даже ассемблерные это было проще сделать, чем средствами самого C SIMD функции к крестам приковал.
За жизнь написал ~100 строк asm-кода. _______Мамкин хацкер.
>>2953200 Когда ASM перестанет тонуть в чартах, тогда и перекатим. Нехер нам тут андеглаунд расшатывать. Тем более когда ссылка на тред в закрепе доски есть.
>>2958746 Точнее, я бы хотел истории от местных анонов услышать. Что ты сразу токсичишь? На хх видел позиции 400к+, в зарубежных компаниях может и больше.
>>2958725 >Хакеры видеоигр на донатах живут. >>2958746 >багхантерах Это все не серьезно.
Не, я имел ввиду серьезную работу в сфере безопасности: анализ вирусного кода, поиск и исследование уязвимостей и тд.
Из самых прибыльных в ревёрсе направлений - вулн-ресёрч, но вкатиться в него весьма себе трудно. Из плюсов: есть всякие партнёрки, которые сотрудничают с компаниями (zerodium, hackerone), так что тебе не придётся напрямую ебаться с секьюрити отделом той или иной компании. Из минусов: очень утомляет расковыривать ту или иную вулну месяцами (а иногда это может быть и просто баг, к которому не подобраться).
Есть ещё всякие малварные аналитики, что ревёрсят малварь, но это скучно что пиздец, хотя, мб, вкусовщина
>>2960042 Well, тогда держи материал, может заинтересует.
Прям самую базу тебе даст книжка "Хакинг. Искусство Эксплойта", там прям азы разбираются. Она написана с опорой на то, что ты используешь линукс, но прочитать её стоит.
Если необходимо для начала подтянуть ревёрс - однозначно Денис Юричев, книга быстро гуглится.
Могу также порекомендовать гайды Corelan, они весьма неплохи, затрагивают винду и тоже идут с азов.
Из более интересного, я посоветую курсы OpenSecurityTraining2 (большинство из них бесплатные). У них есть не только курсы по поиску вулн, но и по дебаггерам, внутрянкам винды, ассемблеру и по атакам на прошивки.
По практике, можно посмотреть в сторону интерактивных платформ по типу HTB (там вроде бы был разде Binary Exploitation, если память не изменяет). В крайняк, можно искать таски на эксплойтинг самому.
Инфу по обучению этому направлению чутка трудно систематизировать, но что выше можешь поглядет без проблем.
>>2960047 Далеко не всегда. В основном, рядовая малварь может использовать методы для обхода UAC, да и в принципе всё. Из последнего, что нашумело весьма сильно и что использовало эксплойт - BlackLotus (форк umap'a), конкретно абьюзилась вулна для обхода Secure Boot (смотри на реализацию BatonDrop).
В остальном, кейсы, где действительно используют эксплойты на ряду с малварью, касаются в основном ранзомвари, но и они разбираются вместе, так как Incident Response.
Как сделать кложу в C, чтобы портируемо/безопасно, без расширений GCC, ебли со стеком, сторонних библиотек и прочего?
Допустим, у меня есть массив указателей на функции, и мне нужно каждую из них заменить функцией-обёрткой, которая совершает какое-то действие и только после вызывает оригинальную функцию. Не приходит в голову, как в скоупе функции-обёртки получить адрес функции, которую нужно вызвать. Может потому что это просто невозможно. При этом я ограничен тем, как сторонняя библиотека вызывает эти функции, то есть я не могу, например, сделать как здесь https://stackoverflow.com/questions/63395637/get-address-of-a-function-inside-of-the-function-in-c-c
>>2961316 Сделай еще один массив, туда запиши адреса оригинальных функций. А в funcs будут только адреса враппера. Внутри враппера вызывай оригинальную функцию. Профит
>>2961880 Мне нравиться. К нему привыкаешь и винда кажется неудобным говном. Как минимум это интересное гиковское занятие, которое расширит твои CS горизонты. Линух это просто рай для программиста. Правда, в НЕКОТОРЫЕ видеоигры на нём не сыграть.
>>2961920 У меня сложилось впечатление, если занимаешься безопасностью/хакингом, то в первую очередь нужно изучать линукс и баш, многие вещи делаются проще и там больше специальных утилит. А винда это моветон.
>>2961959 Про пентестинг хз что это и хакинг (серверов, сетей и прочего, не связанного непосредственно с виндой, как например вирусы под неё) ты верно думаешь. Kali linux стандарт. Даже если ты просто пайтон-раб, то линух то же подходит.
Я бы его вообще рекомендовал всем, кроме домохозяек.
Если будешь собираться ставить убунту как основную систему - не надо. Этот некогда первый домохозяйский линукс скатился в говно по неудобнее винды. Попробуй для начала линух минт: у него гуи как у винды. Или fedora, но с его гуи тебе будет не привычно. https://fedoraproject.org/workstation/ Если безбашенный, то займись юнихпорном (pic 34), т.к. он самый удобный, но сложный.
>>2962387 Просто скачай любой линух на флешку, воткни её в комп и в биосе/уефи сделай загрузочной. Так ты сможешь в live-режиме заценить ОС и определиться.
Планирую получать образовать в ЕС, на США вряд ли накоплю думаю, идти на направление reverse engineering (если такое есть) или на хакинг/киберсекрюити/компьютер сайнс, что порекомендовали бы?
>>2971274 >хакинг/киберсекрюити/компьютер сайнс Это как? Что конкретно? Я бы выбрал компьютер сайнс, ибо там большие знания и можно будет стать Джоном Кармаком, Линусом Торвальдсом, Танненбаумом и много кем ещё.
А чему научать в reverse engineering кроме как пользоваться отладчиком-дизассемблером я не знаю.
А есть ли в сфере реверса работа на аппаратном уровне? Hardware hacking, т.е. изучать как работает электронная плата, находить аппаратные уязвимости, получать несанкционированный доступ к прошивке для дальнейшего реверса. Любые методы от подключения к служебным портам типа uart, которых поленились убрать с платы, до вскрытия чипов и визуального считывания ячеек памяти через электронный микроскоп.
>>2972497 >Сейчас дошло до меня что на ассемблере можно написать прогу которая запустится на пк без ОС Капитан очевидность. >а на Си можно ли такую написать? Linux на Си написан.
>>2972805 >изучать как работает электронная плата Абсолютно всегда, где это надо, есть спецификация, в которой изложено всё, что известно разработчику данной платы, а точнее архитектуры процессора. И этих (массовых) архитектур на свете как бы не очень не много. Даже если процессоры корпоративные и не ориентированные на быдло из М. Видео, то всё равно они базируются на чём-то массовом и известном миру. Также ко всему этому добавляется брутфорс, то есть ты тупо пытаешься получить т. н. >несанкционированный доступ к прошивке , но для этого нужны глубокие познания в устройстве ОС и надо уметь писать драйвера. https://flatassembler.net/examples/win64_drivers.zip https://habr.com/ru/articles/706766/ https://habr.com/ru/articles/701276/
Вообще то, что ты хочешь, больше к каким-нибудь электрикам и любителям паяльника относится, чем к программисту.
>>2973006 >Абсолютно всегда, где это надо, есть спецификация, в которой изложено всё, что известно разработчику данной платы Какая-то наивная хуйня. Забей в общем.
>>2973032 Рил думаешь, что кто-то делает эксклюзивные технологии эксклюзивно для кого-то, а не просто берёт избитую и всем известную технологию и чутка модифицирует её? Даже Cell (архитектура ЦП PS3) была основана на POWER и работает пiд линукс или бисди
>>2973451 Какбе чтобы быть реверсером, нужно быть гением, то есть быть умнее джаваскриптизёров. А если ты такой гений, то значит, что ты уже работаешь в intel или другой богатой организации.
>>2973928 Так он прав, если бы ты был способен быть ревёрсером, создавать стартапы-хуяпы, не писал бы здесь ничего, а уже бы работал где-то, получая зеленую бумажку. А такие вопросы обычно задают бездарности всякие.
>>2975645 >>2973928 >>2973606 >>2973451 Одно из важнейших качеств реверсера - умение искать, ведь реверс это по сути распутывание клубка и поиск нужного конца нитки. А ты со старта побежал что-то спрашивать у других людей и даже не попытался погуглить, хотя гуглинг решает 99% твоих проблем во всех областях. Так что аноны правы, ты уже проиграл.
Начал изучение ассемблера с учебника Юрова, но когда начала подглава с объяснением организации ОЗУ поехала крыша, нихрена не могу понять не дескриптивная таблица, селектор... Что такое линейный адрес, это я так понимаю адрес начала каждого сегмента ОЗУ?
Есть ли чтиво полегче, а то по своей наивности думал и на Таненбаума позарится, но судя по всему и до этого не дойду, очень буду рад, если посоветуете что-то дурачку, видел пост о том, что самому следует все искать... Но выбор литературу это очень важная вещь и без ментора тут не обойтись. Поэтому прошу Вас, помогите
Доброго времени суток, аноны. Быдло-студент репортинг ин пхд, я не вчерашний школьник. Народился у мамы математиком, так вот мой коллега и по случайному совместительству тьютор посоветовал мне к исследованию разобраться с низкоуровневыми языками типа вашей асмы, либо С. Тащемта при получении степени сырны бакалавра я уже относительно глубоко изучал си, но увлечением кодингом, как таковым, он меня не заразил. Есть ли здесь аноны, которые брали асму за базис своего исследования в области компьютер саенса с точки зрения именно математики? Алсо тема "Modelling and optimisation of machine learning algorithms using low-level programming language(s) to enhance computational performance and energy efficiency of computing system", учусь не в пахомии, если это важно, если есть ученики из мелкобритании, то готов к кооперации
Народ, кто-то пробовал реверснуть формат .rbpack нового игрового движка RPG Developer Bakin?
Я вижу как C# прелоадер декриптит бутстрап экзешники и могу это вроде повторить, а как игра распаковывает остальные ресурсы? Можно это тоже повторить извне? И ещё интересует перепаковка обратно в этот формат для перевода игр.