Этого треда уже нет.
Это копия, сохраненная 24 апреля 2019 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
В этом треде мы изучаем самый компактный и низкоуровневый /asm/ 1301036 В конец треда | Веб
В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (RE).

Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.
Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.

Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.

Книги по RE:
https://beginners.re/ - "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!
https://mega.nz/#!Bc9VVAYC!Vk6CFlW6VIoskLNgDKXbsL6FacDQeOKe6LX92wNicKY Нарваха практический курс по дебагингу
https://www.goodreads.com/shelf/show/reverse-engineering - список книг

Сайты по RE:
http://wiki.yobi.be/wiki/Reverse-Engineering
https://www.reddit.com/r/ReverseEngineering/comments/hg0fx/a_modest_proposal_absolutely_no_babies_involved/
http://www.program-transformation.org/Transform/ReengineeringWiki
http://blog.livedoor.jp/blackwingcat/
https://yurichev.com/blog/
http://wiki.xentax.com/index.php/DGTEFF
https://exelab.ru/

Инструменты для RE:
Дизассемблеры:
1) IDA Pro 7.0.torrent (x64 only, для XP нужно патчить PE + вылеты)
2) IDA Pro 6.8.torrent
3) IDA Pro 5.0 - бесплатная версия для некоммерческого использования
4) Radare 2 - наконец прикрутили гуй, но по прежнему нужна только клиническим, не умеющим в скачивания торрентов
5) Остальное

Все книги и статьи Криса Касперски (R.I.P.)
https://yadi.sk/d/CxzdM1wyea4WP или https://rutracker.org/forum/viewtopic.php?t=5375505
+ https://rutracker.org/forum/viewtopic.php?t=272818

Книги по ассемблеру:
"Архитектура компьютера" Э. Таненбаум
С.В. Зубков: Assembler. Язык неограниченных возможностей.

Сайты по ассемблеру:
Замена почившему wasm.ru- https://wasm.in/
https://www.unknowncheats.me/wiki/Assembly
http://asmworld.ru/
https://software.intel.com/en-us/articles/intel-sdm
http://www.nasm.us/doc/
https://sourceware.org/binutils/docs/as/index.html#Top
https://msdn.microsoft.com/en-us/library/afzk3475.aspx

Для ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных:
http://msdn.mirt.net/
http://terminus.rewolf.pl/terminus/
http://geoffchappell.com/

Предыдущие
№4 https://arhivach.cf/thread/301316/
№5 тонущий https://2ch.hk/pr/res/1216107.html (М) если кому нужен тред, сами архивируйте, я в следующий добавлю.
2 1301039
Вкатился.

Анончики, посоветуйте книгу по винде. Желательно что-нибудь новое + x64.
image.png21 Кб, 655x218
3 1301045
ГДЕ FLOAT?
scanf, мать его
sage 4 1301059
>>01045
В предыдущем треде. А табличка у тебя от printf, они отличаются.
sage 5 1301103
>>01036 (OP)

> если кому нужен тред, сами архивируйте


https://arhivach.tk/thread/395971/
# OP 6 1301195
>>01039
"Внутреннее устройство Windows" 7 издание. Ну или 6, или любое другое, там внутрянка не меняется. Или тебе что-то другое?
>>01103

>У Архивача очередной раз отключили домен


А я то думал, что у меня не открывается.
7 1301223
>>01059

> printf


Точно, перепутал

>>1301057
То есть, мне вручную надо преобразовать float в double? Как?
sage 8 1301224
>>01223
fld dword[my_float] fstp qword[my_double]. Ну или сразу на стеке. Можно и вручную, но это битоебля на несколько десятков инструкций, плюс обработка всяких денормализованных чисел, бесконечностей и прочих NaN.
9 1301238
>>01195
Ахуеть, свежачок! Еще плотная 1к листов. Дико двачую.
10 1301350
Очередной раз ассемблер выебал мой мозг.
В Fasm, как я думал, выражение типа word[metka] возвращает значение размером в 2 байта, содержащееся в памяти по этому адресу; но metka без квадратных скобок вернет pointer. Но тогда почему при работе с FPU, если я хочу записать в память значение из вершины стека, я должен написать fstp word[metka], а не fstp metka? Ведь в первом случае, как мне казалось, я передаю как аргумент ЗНАЧЕНИЕ, содержащееся по адресу metka, и логичнее был бы второй вариант. Разъясните этот момент, плиз.
sage 11 1301383
>>01350

> я передаю как аргумент ЗНАЧЕНИЕ


> логичнее был бы второй вариант


Твоя проблема в том, что ты мыслишь в терминах Си. Ты ничего никуда не передаешь как аргумент. Инструкция - не программа (нет, ну на самом деле микрокод и все дела, но это другая история). Ты пишешь инструкции (т.е., указания процессору, что делать), у которых могут быть операнды (указания, с чем делать). Ассемблер их кодирует, представляя их в более удобной для выполнения форме.

При этом и ассемблеру в листинге, и процессору в закодированных инструкциях нужно как-то отличать immediate (непосредственные) операнды, которые представляют собой просто число, готовое к употреблению, от memory операндов (т.е., тех, что подразумевают обращение к памяти). Как кодируются инструкции, рассказывать не буду (можешь погуглить ModR/M). А вот чтобы отличить операнды в ассемблерном листинге, в фасме используется очень простая логика: есть обращение к памяти - есть квадратные скобки. Иначе нет скобок.

Если операнд, работающий с памятью, используется как источник - из памяти что-то читается, если как результат - пишется, если одновременно как источник и результат (например inc [var]) - будут два обращения. Единственное исключение - это всякие lea reg,[bx+si+3]. Но весь смысл этой инструкции - заставить процессор вычислить эффективный адрес, как если бы мы использовали второй операнд для обращения к памяти, но на самом деле никаких обращений к памяти не делать. Именно поэтому в lea скобки есть.

mov bx,1 ; Скобок нет, первый операнд регистр, второй - непосредственное значение, просто число.
mov ax,bx ; Скобок нет, mov прочитает значение из регистра и запишет в регистр.
mov bx,[1] ; А вот тут есть скобки, mov сходит в память, прочитает значение и запишет в регистр.
mov ax,[bx] ; Есть скобки, но прежде чем сходить в память, придется посчитать адрес (прочитав bx).
mov [bx+1],ax ; Более сложный адрес в скобках.
push 123 ; Нет скобок, в стек кладется непосредственное значение. Да, push пишет в память по sp, да скобок нет, но это неизменное поведение push, которое, к тому же, никак не касается нашего единственного операнда. Вот если бы Intel решил явно указывать оба операнда, тогда были бы скобки: какой-нибудь storedec [sp], 123.
pop [123] ; Операнд описывает, куда записать значение из стека. Скобки есть - пишем в память по 123.

> metka без квадратных скобок вернет pointer


Поинтеры остались в Си. Значение метки - численное значение адреса. И это лишь твое дело, как ты будешь это использовать. При использовании имени метки в инструкции, это просто число, оно абсолютно ничем не отличается от других immediate значений. Если адрес метки известен и фиксирован, можешь сделать так, и оно даже будет работать:
org 100h ; COM-файл.
start:
mov ax,4b00h ; Какое-то значение. Просто значение 4b00h.
add ax,start ; Прибавляем какое-то другое значение 100h.
int 21h

> написать fstp word[metka], а не fstp metka


fstp metka = fstp число: immediate-значение, но у FPU нет инструкций с immediate, т.е., нельзя fld 2.0 fmul 256, поэтому ошибка синтаксиса.
fstp word[metka]: скобки есть, инструкция что-то сделает со значением в памяти. Например, напишет туда. Но на самом деле FPU в значения половинной точности не умеет, а fasm об этом знает, поэтому тоже будет ошибка синтаксиса. Вот fistp word[metka] сработает.

В очередной раз я зачем-то написал длинную и бессвязную простыню в ответ на простой вопрос.
sage 11 1301383
>>01350

> я передаю как аргумент ЗНАЧЕНИЕ


> логичнее был бы второй вариант


Твоя проблема в том, что ты мыслишь в терминах Си. Ты ничего никуда не передаешь как аргумент. Инструкция - не программа (нет, ну на самом деле микрокод и все дела, но это другая история). Ты пишешь инструкции (т.е., указания процессору, что делать), у которых могут быть операнды (указания, с чем делать). Ассемблер их кодирует, представляя их в более удобной для выполнения форме.

При этом и ассемблеру в листинге, и процессору в закодированных инструкциях нужно как-то отличать immediate (непосредственные) операнды, которые представляют собой просто число, готовое к употреблению, от memory операндов (т.е., тех, что подразумевают обращение к памяти). Как кодируются инструкции, рассказывать не буду (можешь погуглить ModR/M). А вот чтобы отличить операнды в ассемблерном листинге, в фасме используется очень простая логика: есть обращение к памяти - есть квадратные скобки. Иначе нет скобок.

Если операнд, работающий с памятью, используется как источник - из памяти что-то читается, если как результат - пишется, если одновременно как источник и результат (например inc [var]) - будут два обращения. Единственное исключение - это всякие lea reg,[bx+si+3]. Но весь смысл этой инструкции - заставить процессор вычислить эффективный адрес, как если бы мы использовали второй операнд для обращения к памяти, но на самом деле никаких обращений к памяти не делать. Именно поэтому в lea скобки есть.

mov bx,1 ; Скобок нет, первый операнд регистр, второй - непосредственное значение, просто число.
mov ax,bx ; Скобок нет, mov прочитает значение из регистра и запишет в регистр.
mov bx,[1] ; А вот тут есть скобки, mov сходит в память, прочитает значение и запишет в регистр.
mov ax,[bx] ; Есть скобки, но прежде чем сходить в память, придется посчитать адрес (прочитав bx).
mov [bx+1],ax ; Более сложный адрес в скобках.
push 123 ; Нет скобок, в стек кладется непосредственное значение. Да, push пишет в память по sp, да скобок нет, но это неизменное поведение push, которое, к тому же, никак не касается нашего единственного операнда. Вот если бы Intel решил явно указывать оба операнда, тогда были бы скобки: какой-нибудь storedec [sp], 123.
pop [123] ; Операнд описывает, куда записать значение из стека. Скобки есть - пишем в память по 123.

> metka без квадратных скобок вернет pointer


Поинтеры остались в Си. Значение метки - численное значение адреса. И это лишь твое дело, как ты будешь это использовать. При использовании имени метки в инструкции, это просто число, оно абсолютно ничем не отличается от других immediate значений. Если адрес метки известен и фиксирован, можешь сделать так, и оно даже будет работать:
org 100h ; COM-файл.
start:
mov ax,4b00h ; Какое-то значение. Просто значение 4b00h.
add ax,start ; Прибавляем какое-то другое значение 100h.
int 21h

> написать fstp word[metka], а не fstp metka


fstp metka = fstp число: immediate-значение, но у FPU нет инструкций с immediate, т.е., нельзя fld 2.0 fmul 256, поэтому ошибка синтаксиса.
fstp word[metka]: скобки есть, инструкция что-то сделает со значением в памяти. Например, напишет туда. Но на самом деле FPU в значения половинной точности не умеет, а fasm об этом знает, поэтому тоже будет ошибка синтаксиса. Вот fistp word[metka] сработает.

В очередной раз я зачем-то написал длинную и бессвязную простыню в ответ на простой вопрос.
12 1301402
>>01383

> fstp word[metka]: скобки есть, инструкция что-то сделает со значением в памяти.


Но в том-то и дело: эта команда записывает в память значение из вершины стека fpu. То есть, эта команда использует адрес, но квадратные скобки говорят о том, что, как ты сам сказал, инструкция что-то сделает со значением в памяти.

Вообще, я понял это так: конкретно в случае с этой командой, fasm интерпретирует подобную запись с квадратными скобками и dword/qword не как отсылку к значению, записанному в памяти по адресу metka, а как информацию о том, что записать в память — float (dword) или double (qword).

> Например, напишет туда. Но на самом деле FPU в значения половинной точности не умеет, а fasm об этом знает, поэтому тоже будет ошибка синтаксиса. Вот fistp word[metka] сработает.


Word я написал чисто условно, пусть это будет qword или dword, не важно.

> Поинтеры остались в Си. Значение метки - численное значение адреса.


Виноват, зря использовал слово, значение которого не знаю. Под поинтером я подразумевал как раз то самое численное значение адреса. Думал, это одно и то же.
sage 13 1301453
>>01402

> То есть, эта команда использует адрес, но квадратные скобки говорят о том, что, как ты сам сказал, инструкция что-то сделает со значением в памяти.


У тебя в скобках просто число. Считай, что там fstp [1234h], и именно скобки говорят, что это число - адрес, а не immediate. Я же тебе показал примеры на обычных инструкциях, там очевиднее: mov eax,1 - значение, mov eax,[1] - чтение значения по адресу, mov [1],eax - запись значения по адресу, mov 1,eax - ошибка синтаксиса.

> dword/qword


Это просто указание размера, оно, в зависимости от того, в каком месте операнда ты его напишешь, изменяет либо размер операнда (mov eax,word[1]), либо размер адреса (mov eax,[word 1]). Оно не только с memory операндами работает, но и с immediate: push dword 1 например - сгенерировать не короткую форму инструкции 6a 01, а длинную 68 01 00 00 00. Или можно даже push dword[word 2000h]: используя 16-битный адрес 2000h прочитать по нему 32-битное значение и засунуть его в стек. Но ты пока с address size не заморачивайся, это крайне редко имеет смысл.

> а как информацию о том, что записать в память — float (dword) или double (qword).


Ну да. Но вообще, fasm может хранить вместе с меткой информацию о размере (а может и не хранить). Если не хранит, и он не может никак логически его вычислить, надо указывать размер явно:
var dq ? ; К метке автоматически привязался размер.
fstp [var] ; Фасм сам "в уме" добавит qword к адресу.
var2: dd ? ; Двоеточие не дает привязать размер.
fstp [var2] ; Ошибка синтаксиса: непонятно, сколько писать, и надо указать размер явно.
mov [var2],eax ; Размер не нужен, пишем 32 бита, потому что источник 32-битный.
14 1301454

> fstp [var] ; Фасм сам "в уме" добавит qword к адресу.


Стек FPU 64-битный?
sage 15 1301458
>>01454
Стек 80-битный, но var dq ?, поэтому он помнит, что где var, там qword.
# OP 16 1301597
>>01238
Рано радуешься, там вышел только первый том, второй ещё или не вышел, или не переведён. Впрочем можешь смело читать 6 издание, там много чего подходит, я как читавший всё со времён третьего говорю.
17 1302210
>>01453
Спасибо за длиннопосты, анончик
image.png14 Кб, 397x419
18 1303274
Господа асмоебы, вкатываюсь после большого перерыва. Поясните, в x64 теперь у нас новые регистры общего пользования, которым даже имена поленились придумать, а старые 64-битные теперь зовутся rax, rcx и так далее, да?
sage 19 1303301
>>03274
Да. Буковки в именах регистров, пришедших из 32- 16-битного кода, означают accumulator, base, counter, data, source index, destination index, base pointer и stack pointer соответственно. Некоторые инструкции и режимы адресации требовали строго конкретных регистров, потом ограничения ослабили, а у 8 новых регистров, добавленных в x86-64, нет никаких исторических употреблений, нет имен, поэтому и буковки им не нужны. В других архитектурах, где регистры более-менее равноправны с рождения, циферки использовались для большинства регистров изначально.
20 1303303
>>03274
А куда ah/bh дели?
21 1303312
>>03301
Спасибо, я в курсе про accumulator и так далее, все-таки несколько лет занимался этим, но все равно спасибо. Но как же stosd и т.п. команды, им же esi,edi нужны по идее, равно как и циклы ecx.
# OP 22 1303319
>>03303
В таблицу не влезли.
sage 23 1303325
>>03312

> Но как же stosd и т.п. команды, им же esi,edi нужны по идее


Ну так я сказал, что не отменили, а ослабили ограничения, т.е., значительно расширили эффективную адресацию, например.
24 1303510
Хотел сохранить rsp куда-нибудь в xmm0 и получить на один регистр больше, но оно так не работает почему-то, ловлю рандомные сегфолты, а gdb говорит, что не может прочесть память, хотя там просто из одного регистра в другой данные перекладываются, даже нет обращений к памяти. Пиздец ограниченный регистр этот ваш rsp, нельзя им нормально пользоваться, даже если мне стек не нужен.
25 1303512
>>03510
Ну и то, что какие-то регистры могут быть базой/оффсетами при чтении из памяти, а какие-то нет — тоже полный пиздец.
То есть для многих задач эффективное количество регистров оказывается намного меньше, чем 16.
26 1303530
>>03510
Стек не для этого, да. Нахера тебе в rsp класть? Клади в стек - это быстрее и короче.
image.png823 Кб, 1024x512
27 1303534
>>01036 (OP)
А есть в треде активные или бывшие демосценеры?
Как вы там, пишите 256б-4кб демки?
28 1303648
>>03530

>Клади в стек - это быстрее и короче.



Стек - это значит в лучшем случае L1 кеш (в два раза медленнее регистров).
29 1303653
>>03312

>Но как же stosd и т.п. команды, им же esi,edi нужны по идее, равно как и циклы ecx.



Микроархитектурка порешает, так что в 2к18 этим наследием дремучих cisc-времен заморачиваться не стоит.

Да и в давние времена зилога тру-хацкеры этих еба-инструкций делающих что то сложное чурались и во всей демосцене на спектурме ты ничего кроме простых 8080 опкодов без всей этой зилоговской поеботы не найдешь.
30 1303817
>>03534
Эти боги уже либо работают во всяких майкрософтах или владеют ими, что более вероятно, либо имеют многомиллионные ботнеты.
31 1303819
>>03817
Или сосут хуи в нищите как я :(
32 1303839
>>03819
Не хочу тебя огорчать, анончик, но выбор всегда только за тобой...
sage 33 1303841
>>03653

> так что в 2к18 этим наследием дремучих cisc-времен заморачиваться не стоит


Да что ты говоришь? А между тем, начиная вроде бы с Ivy Bridge, явный цикл снова сосет у rep stos/movs.
34 1304728
Аноны, я интересующийся/начинающий не суть. Поясните за отрицательные числа. Обычно в книгах так: берём число (7 младших бит онли), инвертим, старший (8-ой бит) ставим в единицу и готово.

Но т.к. профессору похуй, что ты там нахуевертил, каким образом пояснить ему, что это отрицательное число (например, это -5, а не 251). Возможно, это где-то дальше в книге есть, но пока что даже ремарки, что это обрабатывается программно, самим погроммистом, читайте дальше, в книге есть нет. От этого нет полноты картины.
35 1304784
>>04728
Отрицательных чисел не существует
-1 и 129 это одно и то же
36 1304786
>>04784

>-1 и 129


Ну или как там у вас байты крутятся
мимо вебмакак
37 1304787
>>04784
А в сопроцессоре существуют.
38 1304798
>>04784
Вообще чисел не существует. Есть только биты.
39 1304800
>>04784
Числа не числа, знаки не знаки
Так как это работает? Как мне правильно записать, сохранить и считать отрицательное число? Шо для этого сделать надо? Куда гуглить? Какая схема работы?
40 1304804
>>04800
Как в сраной сишке же.
Написал uint - получил беззнаковое целое, написал int - получил знаковое.
А в памяти один и тот же байт.
41 1304808
>>04800
Специально ничего не надо сделать. Отрицательные числа придуманы такими, чтобы с ними работало то же АЛУ, что и с беззнаковыми.
42 1304819
Я никогда не писал на ассемблере, но вроде когда-то слышал, что в ассемблере циклы реализованы по принципу goto. Это так?
43 1304824
>>04728
Не используй спойлеры в тексте, если уважаешь читающего.

У тебя арифметика по модулю 2^8. Для арифметики по модулю целый раздел математики есть, но ты можешь считать, что у тебя при прибавлении все закольцовано: 0+1=1, 1+1=2, 3+1=3, ..., 254+1=255, 255+1 = 0. Почему так получается понятно - при переполнении у тебя самый старший разряд выкидывается и остается как будто мы сделали не x+1, а (x+1) mod 256. Аналогично будет и для произвольных чисел, x+y на самом деле равно (x+y) mod 256.

В этой арифметике
-x = (256-x). Не веришь, проверь на калькуляторе https://www.miniwebtool.com/modulo-calculator/?number1=-5&number2=256

Отсюда следует, что когда тебе нужно для данного x вычислить -x, тебе нужно вычесть 256-х. В двоичном коде это делается инвертированием всех битов. Называется это дополнительный код, так как x + (-x) = 256 = 10000000b

Дальше у нас стоит задача избавиться от неоднозначности - ведь на самом деле мы не можем отличить -x и 256-x. На уровне процессора ты ничего не сделаешь. Но тут приходят на помощь типы данных.

И тогда мы говорим "а старший бит у нас это на самом деле знак". И мы получаем уже знаковую переменную. Или не говорим - тогда получаем не знаковую.
44 1304830
>>04819
Врут конечно. Они по принципу loop реализованы.
45 1304837
>>04728

>берём число (7 младших бит онли), инвертим, старший (8-ой бит) ставим в единицу и готово.


Не совсем
>>04784

>-1 и 129 это одно и то же


Даже близко нет.

И это асм тред, лол?
46 1304898
>>04800

> Так как это работает?


>>04824

> -x = (256-x). Не веришь, проверь на калькуляторе


Ты забыл упомнять, что это выражение не дано нам свыше, и проверять на калькуляторе его незачем. Оно появилось из того простого факта, что, как ты упомянул, в арифметике по модулю 2m (m - размер регистра в битах), (255 + 1) % 28 = 0. Но если мы прибавили к чему-то 1 и получили 0, то это же была -1! Т.е., при желании, мы можем интерпретировать 255 как -1. Это работает и дальше: 254 + 1 = 255, значит мы можем интерпретировать 254 как -2 (-2 + 1 = -1). Так и получается формула 2m - x. Но "создавая" таким образом отрицательные числа, нам придется где-то остановиться, ограничить максимальный x, т.е., разбить диапазон беззнаковых 0..255 на положительные и отрицательные. Принято разделять его так (для восьмибитных регистров, m = 8): -128..127, т.е., 0..127 для положительных и 128..255 для отрицательных учитывая ноль, 255 значений никак не получится разбить поровну, и из двух вариантов -128..127 выбран потому, что во всех отрицательных числах -128..-1 -> 128..255 установлен старший бит, что позволяет быстро узнать знак числа. Изредка в софте используются и другие варианты, например, я видел в прошивке DSP -1..254 -> 0..254 для положительных и 255 для -1.

> Куда гуглить?


https://en.wikipedia.org/wiki/Two's_complement
Это самый распространенный, но не единственный способ. Например, во флоатах просто отдельный бит под знак.
47 1304958
>>03534
Есть.
Вопрос не понял, берется да пишется. Любую работу тебе проще начать с модификации готовых сорцов под свой код, даже декомпилировать ничего не требуется.

Вот пример http://www.pouet.net/prod.php?which=49796
48 1304967
>>03817
Майкрософтами "владеют" через акции, это в основном менеджеры (поскольку старые девелоперы там двигают в менедмент).

Демомейкеры (втч старые) не "боги". Большинство работает программистами или игровых движков или графики или просто тупо в геймдеве.

Но некоторые сумели да. Например Fredrik "Mr. H" Huss и Magnus "Vogue" Högdahl, составлявшие демогруппу Triton,
авторы FastTracker позже образовали Starbreeze Studios https://en.wikipedia.org/wiki/Starbreeze_Studios
49 1304976
>>01383
Но при этом твои простыни ахуенны и весьма полезны, добра тебе
а еще ты заебывлася с пунктуацией в километровых простынях, это еще круче
50 1305058
>>04819
По сути да. Либо пока ECX не обнулится, либо по условному переходу.
51 1305088
>>04819
Так тебе в этом ничто не мешает убедиться.

https://godbolt.org/z/NBySic

jg .L2
это "jump greater" на метку .L2
это происходит после того как eax проверяется на 0.
Поводи мышкой над командами ассемблера. Выбери другие микропроцессоры или компиляторы и посмотри какие у них команды (опцию компилятора -m32 может понадобиться убрать)
52 1305098
>>04804
>>04808
>>04824
>>04898

Спасибо, аноны
По поводу FPU 53 1305292
Нужно ли каждый раз прописывать в программе инициализацию сопроцессора? И если да, то FINIT или FNINIT?
54 1305302
>>03530
Мне это не подходит, у меня каждый цикл на счету, а ты предлагаешь ждать полчаса.
55 1305303
Аноны, почему нельзя загрузить число в стек FPU, заранее не записав его в data section? Почему нельзя написать fild 10 или fld 12.5, но можно написать push 132?
56 1305313
>>05303
Потому что эта инструкция поддерживает только memory operand.
57 1305315
>>05313
https://c9x.me/x86/html/file_module_x86_id_100.html
Ладно, не только, но точно не immediate value
58 1305317
>>05313
Эээх
59 1305320
>>05317
Ты не должен этого хотеть.
60 1305324
>>05320
Ну вот хочу я умножить число на два. Мне ради этого забить в data section dva_const dq 2.0? Так себе.
61 1305335
>>05324
Да, так это и работает.
62 1305336
>>05335
Мдяя
63 1305350
>>05336
Ну ты можешь сканпелировать с dva_const dq 2.0, посмотреть что там получилось, переписать на мокток, а потом
push
push
ololo
64 1305394
>>05292

> Нужно ли каждый раз прописывать в программе инициализацию сопроцессора?


Если у тебя контролируемая среда: твоя собственная программа, нормальная ОС, все соблюдают конвенции вызова (в том числе и чистят стек), исключения замаскированы и т. д., то не нужно.

> FINIT или FNINIT?


fninit, чтобы не свалиться на чужом исключении.

> почему нельзя загрузить число в стек FPU


Потому что когда дизайнили FPU, он был отдельным устройством, и immediate-операнды там впихнуть было некуда физически: либо опкод ему говорил, что операнд - стек FPU, либо FPU должен был продолжить операцию с памятью, которую начал центральный процессор (т.е., процессор выставлял адрес на адресную шину). Чтобы поддержать immediate-операнды, потребовался бы более сложный дизайн. Потом FPU запихали в проц, но дизайн опкодов остался.

> можно написать push 132


Центральному проецссору (было) проще, у него декодер вычитывал всю инструкцию, вплоть до 15 байт, а не ебался через ESC-опкоды.

>>05324

> Ну вот хочу я умножить число на два.


Сложи его с самим собой.

> Мне ради этого забить в data section


Подразумевается, что код генерит оптимизирующий компилятор, а не макака.
65 1305795
>>05394

>> Ну вот хочу я умножить число на два.


>Сложи его с самим собой.



>> Мне ради этого забить в data section


>Подразумевается, что код генерит оптимизирующий компилятор, а не макака.



Двачую этого.
Чтобы не ебать мозги, напиши код на Си, откомпилируй годным компилятором и посмотри в IDA или HIEW как там делаются операции.
Нормальный компитятор таки суммирует число с самим собой вместо умножения на 2 и еще много чего такого хитровыебанного, до чего ты не дойдешь сам без охуительного опыта. Ну или велосипеды будешь изобретать постоянно.
66 1305808
>>05795
Я не имел в виду, что анон макака, потому что кладет константы в .data. Компилятор их тоже туда кладет, но самостоятельно, без необходимости бесполезной ручной работы.
67 1305814
>>05795
Он с умножением на два просто пример привёл, там вполне могло быть и не два, а что-то с очень далеко плавающей точкой.
68 1305820
>>05795

>Чтобы не ебать мозги, напиши код на Си, откомпилируй годным компилятором и посмотри в IDA или HIEW как там делаются операции.


Вся суть асма в 2018
69 1305828
>>05820
Неправда.
70 1305957
>>05808
Я тебе вообще не отвечал. :)

>>05820
В 2018-м с 64-битными регистрами (для особо упоротых можно юзать 128-битные, по факту это RDX:RAX), можно реализовывать ОХУИТЕЛЬНО точные и быстрые fixed-point вычисления.
71 1305962
>>05814
Много умножений-делений сишные компиляторы делают изумительно. Я охуел, когда умножение на 5 через команду LEA много лет назад начал делать интеловский компилятор, равно как и деления сдвигами-вычитаниями.
72 1306309
>>05962
Всё это охуительное дрочево со сдвигами и магическими константанми это конечно круто, но бывает, что нужно делить, например, на 5.3841, и это придётся хранить в константе.
73 1306315
>>06309
Блядь, да что там говорить, я тыкаю экзешник игры от EA в последнюю неделю, так они там и ны 1000 делят флоатами целые числа.
74 1306404
>>06309
Да дели, никто не против. Я просто еще раз говорю, что лучше всего алгоритм реализовать на Си, откомпилять, а потом перенести в ассемблер, отшлифовав уже там по вкусу (хуй знает, что тебе надо - размер или скорость).
75 1306485
У ассемблера все в норме с перспективой на будущее?
Нет никакой альтернативы которая скоро спихнет его?
76 1306492
>>06485
Программирование в машкодах даст пососать любому ассемблеру.
77 1306495
>>06492
Как вкатиться?
78 1306496
>>06492
Одно без другого особого смысла не имеет.
79 1306512
>>06492
Программирование в микроопах даст пососать любому машкоду.
80 1306541
>>06485
Ну, если ты в 1980-м живешь, то вопрос мог бы иметь смысл.
81 1307138
Сап, двач. Есть вопрос: существуют ли проекты для графического отображения выполненных инструкций в отладке? Или хотя бы вывод в текстовый файл списка только тех команд программы что выполнились до какого-нибудь брейкпойнта?
82 1307139
sage 83 1307182
>>07138

> существуют ли проекты для графического отображения выполненных инструкций в отладке


Да, это такая штука, которая называется отладчик. Представлены в основном в винде, но практически все поддерживают различные варианты трейса, запускаемые одной кнопкой. В линуксах комфортно отлаживаться не любят, предпочитая пердолиться в gdb.
84 1307542
Как использовать функцию rand (и прочие функции, возвращающие какие-то значения) из msvcrt в ассемблере?
85 1307708
>>06512
Программирование FPGA даст пососать любому опкоду.
image.png137 Кб, 640x480
86 1307713
>>07708
погромирование на скрутках даст пососать любому fpga
sage 87 1307715
>>07542
; push arguments in reverse order (для rand нинужно)
call [rand]
; add esp, n*4 (где n - количество аргументов выше)
; что-то делать с eax
Можешь посмотреть, как анон на фасме вызывал в прошлом треде: >>1300720
88 1307767
>>07715
Мне стоило уточнить вопрос: куда помещается значение, которое возвращает функция?

> что-то делать с eax


То есть, это значение будет в eax? Все ли функции, которые возвращают что-то, используют для этого eax? А если нужно 64 бита? edx:eax? Где вообще можно ознакомиться с подробной информацией о конкретной dll-библиотеке, о ее функциях (о входных и выходных данных в том числе)? Справка по функциям C/C++ не ответила на вопросы по выходным данным в функциях в ассемблере.
sage 89 1307770
>>07767

> Мне стоило уточнить вопрос: куда помещается значение, которое возвращает функция?


В 32-битном коде? 32-битные значения (и меньше) в eax, 64-битные в edx:eax, небольшие структуры тоже в edx:eax, если влезают. Если не влезают, вызывающая функция пихает в стек первым аргументом указатель, по которому нужно структуру записать, а вызываемая этот же указатель возвращает в eax. Значения с плавающей точкой в ST(0) в FPU.

> Справка по функциям C/C++ не ответила на вопросы по выходным данным в функциях в ассемблере.


Соглашения о вызове распространяются на все функции, соглашение указывается в прототипе: __stdcall/__cdecl или всякие дефайны вроде WINAPI, CALLBACK, PASCAL, которые разворачиваются в __stdcall (удостовериться можно, посмотрев в хедерах SDK). Информация о соглашениях публикуется (в том числе и в MSDN есть), есть и в вики: https://en.wikipedia.org/wiki/X86_calling_conventions

> Где вообще можно ознакомиться с подробной информацией о конкретной dll-библиотеке


Гуглишь Dependency Walker, смотришь, какие функции экспортируются, сами функции ищешь в MSDN и в хедерах Windows SDK.
90 1307779
>>07770
То есть то, куда функция должна возвращать данные, прописано в соглашениях о вызове? И там, как я понял, указано, что 32-битные значения (в pe32) записываются в eax, 64-битные в edx:eax, а вещественные числа - в стек fpu, так?
91 1307813
Аноны, киньте книгу/ресурс почитать о формате PE, желательно разжеванный до мелочей материал. Я уже блять не могу, какие-то ебанутые структуры в структурах структур, все эти секции, хедеры и прочие пердолинги. С меня как всегда.
sage 92 1307831
>>07813
Гугл, "Крис Касперски путь воина", потом спеку Microsoft, чтобы понять, что у Криса куча ошибок. И не стесняйся брать одновременно хекс-редактор и какой-нибудь высокоуровневый вьювер (например, CFF Explorer, или что там сейчас модно) и смотреть на нескольких примерах.
93 1308759
>>07813
если найдешь чё нибудь годное про современные винды - скинь сюда пж, тоже интересно. а то такое чувство, что позже 2010 никто не писал про нововведения в PE
94 1308764
Что крутого можно сделать с помощью RE? Как обучающий петпроект для меняб
sage 95 1308799
>>08764
Портируй какую-нибудь старую игрушку куда-нибудь. Или сервер для нее сделай. Или редактор карт.
96 1308809
Короче, я нашёл как сделать паузу(уже давно), invoke Sleep, 100
Я не обижаюсь. У меня вопрос:
Будем реверсить серьёзное дерьмо?
sage 97 1308824
>>08799
Какой нибудь фоллаут2?
>>08809
Что?
sage 98 1308847
>>08824

> Какой нибудь фоллаут2?


Считай по килобайту в день минус рантайм кажется, что это мало, но ты не будешь заниматься этим каждый день, где-то будешь тупить, к некоторым функциям будешь возвращаться, так что это еще очень оптимистичная оценка, даже с учетом HexRays.. Фоллаут весит метр. Понимаешь, в чем подвох?
sage 99 1308849
>>08847
Ehh... три года в самом оптимистичном варианте o(〒﹏〒)o
100 1308867
>>08764
Вытащи алгоритмы фильтра из VST Spire. Я даже заплачу. Но немного, потому что за много я и сам это сделаю
101 1308890
>>08824

>Что?


Давно пытаюсь перевести valkyria profile на ps1 чё говорить.. игра пиздатая, если получиться понять алгоритм то можно и остальные игры от tri-ace перевести. Ща поверхностно расскажу что сделал(не цепляйтесь за терминологию, уже подзабыл), игра зашифрована slz-алгоритмом, дешифратор в инете есть. Я разбил весь диск на slz-куски(много получилось), перекодировал и соединил, в аськах можно найти некоторые слова, типа Lenneth, Start чёто такое. Я так понимаю, там своя таблица символов, надо разобраться как она работает. Инструментов в сети хватает, там чел перевёл на испанский и лежат исходники на Lua(я не шарю), тексты можно скомуниздить из переведённой манги. Если что вечером приду с работы.
102 1308891
>>08890
Добавлю. Кто, если не мы?
103 1308945
>>08824
Уже есть FOnline, там и сырцы недавно открыли.
104 1309280
>>08890
Всё, я понял что нужно делать, не нужно никаких исходников. Если я правильно понимаю, то на ps1 архивируют инфу кусками для экономии места на диске, вроде бы обычная практика. Значит когда будет текст на экране, нужно поставить паузу в отладчике, думаю таблица символов должна находиться в памяти. Теперь надо просто найти какие slz-куски загружены в память(тупо копипастить hex из разархивированного куска в поиск по памяти), наверняка в одном из них и будет таблица. Потом понаставить бряков на обращение к таблице и должно получиться. Скорей бы выходные.
105 1310296
>>08890
>>09280
Мне никто не ответит даже? В чём прикол этого всего7
sage 106 1310318
>>10296
Я лично просто не понял вопроса.

> таблица символов должна находиться в памяти


Какую таблицу ты ищешь? Трансляцию в ASCII? Ее может не быть, потому что она никому нахуй не нужна на консолях. Вот есть у тебя квадратная текстура с глифами (буквами), и когда игра рисует текст, она копирует нужный глиф из текстуры, вычисляя позицию в зависимости от численного значения символа. Соответственно, кодировка текста зависит лишь от позиции соответствующего глифа в текстуре и может быть абсолютно любой (в том числе и отличаться в зависимости от шрифта). Могут быть и многобайтовые символы.
ukgrvh4.png115 Кб, 640x441
107 1310361
>>10318
Ну ты сказал что я думаю, только сложно.
Просто я раньше не замечал что у букв есть тень, значит это текстура. Ну и нужно просто найти обращение к этим текстурам, они наверняка в одном slz-куске, и у того чувака с исходниками тоже фигурирует перерисовка текстур. Просто раньше не понимал как это делается.
А то что в аськах стал находиться текст, это к тому что двигаюсь в нужном направлении.
108 1310377
>>10318

>она копирует нужный глиф из текстуры


Там много этих slz-кусков, больше ста точно(и то что это прям куски инфа 100%). Значит игра не подгружает их с диска по отдельности, значит во время прорисовки текста все эти текстуры в памяти - таблица символов (образно говоря), и подгружаются они из одного куска или нескольких(приставке же нужно время чтобы успеть их разархивировать, не будут же они для каждой буквы каждый раз разархивироваться).
109 1310381
>>10318
Я тебя понял, выше с другой позиции рассматривал твой пост.
sage 110 1310385
>>10381
А просто взять распаковать первые несколько кусков и поскроллить в какой-нибудь nana нельзя (https://web.archive.org/web/20140320175114/http://www.neillcorlett.com:80/nana/ )? Хотя ты сказал же, что есть исходники на Lua, проще в них разобраться, наверное. Или тебе интересен именно процесс?

> тень


Да там просто сдвиг вправо вниз и отрисовка другим цветом. В текстуре тени скорее всего нет.
111 1310388
>>10385

>в какой-нибудь nana нельзя


Пробовал, находит слова только в аськах.
Я не представляю как на lua можно реверсить игру, это же оч. высокоуровневый язык.
112 1310389
Пора спать, завтра найду эти символы в его lua-исходнике.
sage 113 1310399
>>10388

> Пробовал, находит слова только в аськах.


Это не хекс-редактор, это смотрелка графики (если повезло, и она не пожата ничем).

> это же оч. высокоуровневый язык


Ну хуй знает. По мне - это наоборот плюс. Я форматы файлов питоном разбираю - все структуры данных уже в комплекте, не нужно ничего переизобретать, заебись.
114 1310435
Реверсач, как можно получить дескриптор процесса кроме OpenProcess/Nt/ZwOpenProcess/CreateProcess? И еще вычитал, что можно что-то нашаманить с NtMapViewOfSection и писать/читать память без открытого дескриптора, это правда? думаю что нет
115 1310789
>>10399

>Это не хекс-редактор, это смотрелка графики (если повезло, и она не пожата ничем).


Вот если сработает, то нихуя себе ты мне помог. Конечно не пожата, я же всё уже разжал. Завтра выходной, сегодня пивко, поэтому завтра займусь.
116 1310791
>>10435
Моё мнение - напиши подробней что ты делаешь, может тебе вместо дескриптора что-нить подойдёт.
sage 117 1310800
>>10789

> я же всё уже разжал


Это никак не гарантирует, что там нету какого-нибудь RLE у картинок, или даже чего-то посерьезнее.
118 1310810
СУКА! Без всякой на то причины, в TD32 изменилась раскладка с английской на русскую. Как это исправить?
119 1310825
>>10800
Ты думаешь японцы станут сжимать, а потом ещё раз сжимать? Сомнительно.
120 1310829
Я кажется разбил на slz-куски только slz1 и slz2, они простые, ищутся просто по slz в аськах. А slz3 содержит в заголовке slz, потом кажется кол-во байт в куске, потом 03h. Я собсно и написал ту прогу с видео для поиска таких заголовков. Завтра буду вспоминать.
121 1310854
>>10791
Читаю и записываю в память другого процесса. Также интересует, как можно повысить скорость чтение/записи памяти. Я использую NtReadVirtualMemory и NtWriteVirtualMemory для этого.Еще вычитал, что можно зашарить секцию/память/что-то там еще с помощью NtMapViewOfSection, тем самым увеличив скорость чтения/записи и тем самым минуя ситуацию с вечно открытыми хэндлом.
EbaniyRot.mp4980 Кб, mp4,
320x240, 0:04
122 1310990
Romhacking.net не работает, вчера работал
123 1311215
>>10435
>>10854
Бумп реквесту, анончики! Выкопал инфу из баянистого 2006:

РЕПАМИНГ СТРАНИЦ — ОТОБРАЖАЕМ ФИЗИЧЕСКИЙ АДРЕС СТРАНИЦЫ, КОТОРУЮ МЫ ХОТИМ МОДИФИЦИРОВАТЬ, НА ВИРТУАЛЬНОЕ АДРЕСНОЕ ПРОСТРАНСТВО «СВОЕГО» ПРОЦЕССА ПОСРЕДСТВОМ ВЫЗОВА ФУНКЦИИ NTMAPVIEWOFSECTION. НАЗНАЧАЕМ ВСЕ НЕОБХОДИМЫЕ ПРАВА И АТРИБУТЫ, ПОСЛЕ ЧЕГО ДЕЛАЕМ С НЕЙ ВСЕ, ЧТО ХОТИМ! ТАКИМ ОБРАЗОМ, МОЖНО ОТКРЫТЬ ДОСТУП К ЯДРУ ДАЖЕ С ПРИКЛАДНОГО УРОВНЯ, ПРИЧЕМ БЕЗ ПЕРЕЗАГРУЗКИ!

Кто-нибудь может конкретнее объяснить как это работает? Кроме того, эта информация еще актуальна или нет?
13NUpumKPE.png336 Кб, 843x928
124 1311265
Господа, я очередной пытаюсь выкупить ИДА в этот угрюмый пятничный вечер.

Есть экзешник, в CE, к примеру, функция, которую нужно декомпилировать, она находится по адресу 4D4D80 (или .exe + D4D80), я ее могу там похукать, брейкпоинты, итп, но она достаточно сложная и хотелось бы ее декомипильнуть в хотя бы какой-то сишный код.

Первая проблема, с которой я столкнулся в ИДА - я не могу найти эту функцию, как бы я не пытался, прыгал по адресам, по адресу 4D4D80 находится какая-то ссанина ( возможно это подадреса сегментов ), мне просто хотелось бы, чтобы адреса были такие же, как и в CE, потому адреса в СЕ соответсвуют тому что я читаю/записываю WriteProcessMemory().

Вторая проблема, это перевод в сишный код, я знаю что ИДА это умеет и могёт, на оундкоре считается чем-то вроде классики, если не ошибаюсь, эта фича называется Pseudocode, но я не смог нигде найти упоминаний о существовнии подобного (IDA 7.0.170914)
125 1311266
>>11265
F5/CTRL-F5
126 1311270
>>11266
Благодарки, теперь осталось найти ту функцию. Может там можно как-то выключить адреса по сегментам?
sage 127 1311292
>>11270

> теперь осталось найти ту функцию


Во-первых, ты можешь приаттачиться отладчиком иды к процессу, тогда адреса (скорее всего) совпадут. Если не совпадут, читай про ASLR, запатчи флаг ASLR-aware в заголовке.

> по адресу 4D4D80 находится какая-то ссанина


Во-вторых, возьми какой-нибудь детектор упаковщиков (peid, protection id, detect it easy или что там сейчас модно) и узнай, не запакован ли файл. Если упакован - распакуй. Если не можешь, см. во-первых.
В-третьих, нахаляву ничего не бывает, читабельный сишный код получается после длительного анализа.
128 1311301
>>11292
Только понял, что данные екзе файла и память процесса это не од
sage 129 1311316
>>11301
Да нет, тебе IDA (в случае PE .exe) имитирует загрузку программы и показывает такие же виртуальные адреса, как в памяти. И даже если она показывает не те адреса (например, ASLR в системе, или ты грузишь DLL, а ее базовый адрес занят), всегда можно сделать Rebase program в IDA. Но она показывает то же, что и винда видит при старте программы. Если программа после запуска сама себя модифицирует (распаковывает), то IDA, естественно, об этом узнать неоткуда, и ты видишь мусор. Если ты знаешь алгоритм, или серьезно ковыряешься в упаковщике, можно написать статический анпакер, который прямо в IDA будет "выделять" память (создавать дополнительные сегменты) и делать PatchByte так же, как делает стаб упаковщика в рантайме, а можно "просто" запустить упакованую пограмму под отладчиком, дождаться, пока стаб ее распакует и после этого сдампить результаты в файл, на который уже можно натравливать IDA. Ну после ребилда и исправления импортов, если они интересуют.
130 1311512
>>10825
Японцы те ещё извращенцы, если что.
image.png94 Кб, 1471x704
131 1311605
>>11316
Теперь память совпадает, но в ИДА не формируются инструкции из байткода, соответственно F5 не работает. Возможно из-за динамичности памяти они решили не обновлять это, как делает СЕ?
sage 132 1311618
>>11605
Press X to win<C> to make code.
133 1311779
Полу-теоретический вопрос.
Вот есть игра, в ней из мобов надо выбивать итемы всякие и они падают на землю.
Хочу при выпадении определённых вещей чтоб мне мой скрипт пищал.
Прочитать память из скрипта я смогу, но как её найти?
Как через чит энжин найти память, которая хранит все вещи на земле? Вообще не понимаю что искать.
134 1311791
Есть инструкция
mov ecx, fs:[0000002C]

Нагуглив, я предположил что она вычитывает информацию из https://en.wikipedia.org/wiki/Win32_Thread_Information_Block , которая уникальна для каждого треда. И, соответственно, вызвав функцию из разных потоков можно получить разные результаты (I believe).

Первый вопрос, как прочитать через WinAPI какие треды в процессе какую информацию содержат в этой структре.

Второй, я так понимаю, что эта фича была сделана чтобы одна и та же функция но в разных потоков занималась обновлением всей хуйни, только в первом треде обновляются объекты, в другом - инвентарь, в третем - еще что. Насколько это может быть похоже на правду?
135 1312051
Сап двач нужна ваша помощь
У меня в универе изучают ассемблер TASM ( поставлен он там через dosBox никто не может объяснить как они эту парашу ставили )
Мне нужно скачать TASM но я хз где его скачать рабочий и как с ним работать если кто может поделитесь ссылкой
sage 137 1312375
>>11791

> как прочитать через WinAPI какие треды в процессе какую информацию содержат в этой структре


Ты заебешься. Лучше похукай в игре что-нибудь. Но если очень хочется: перечисляешь потоки в процессе, делаешь каждому GetThreadContext, достаешь оттуда SegFs, скармливаешь его GetThreadSelectorEntry, собираешь линейный адрес TEB, разбираешься, как работает TLS, парсишь TLS, профит. Тебе оно надо?

> что эта фича была сделана чтобы одна и та же функция но в разных потоков


Это вообще может быть что-нибудь околосистемное. Например, банальные thread-local данные сишного рантайма.
138 1312504
>>08764
>>08847
Решил я короче попробовать зареверинжинирить эту игру в общем:
https://en.wikipedia.org/wiki/State_of_War_(video_game)

Пожелайте удачи и не бросить это дело
139 1312673
Чо бы накодить на асме.
140 1312682
>>12673
Стандартную библиотеку Си
141 1312695
>>12673
256b demo
я больше не вижу применения этой хуйне
142 1312768
>>12695
Подробнее.

Неужели нет применения? Ничто как ассемблер не позволяет так плотно ебаться с компом. Дрова, загрузчики и лоулевел всегда же быть, хоть немного, но нужны.
143 1312772
>>12768
В 2018 нет.
Асм x86 сам по себе это байткод для микрокода внутри процессора, поэтому до железа тебя в любом случае не пустят. А как тасовать этот самый микрокод для более лучшей скоростности лучше знает компилятор.
144 1312773
>>12772
А реверсить за тебя кто будет? Hex-rays штоле?
Вот то-то!
145 1312775
>>12772
А на чем пишут компиляторы?
146 1312776
>>12773

>Hex-rays штоле


Ну как бы да. ._.
С появлением hex rays у меня наконец-то стало получаться реверсить, потому что асмовскую поеботу я вообще не воспринимаю, а вот глючный высер hex-rays'а вполне.
147 1312782
>>12775
Ну уж точно такую сложную вещь как компилятор на ассемблере не пишут. Хорошим тоном считается написать компилятор языка на самом языке - тогда он считается уже зрелым.
Ассемблер тебе понадобится только на последней стадии - кодогенерации из одного из промежуточных представлений.
Если ты хочешь написать компилятор в 2018, тебе нужно генерить LLVM-код, а LLVM уже превратит этот код в машинный. Так ты построишь минимум велосипедов, потому что LLVM умеет применять к промежуточному коду кучу оптимизаций и делать много чего еще хорошего.
А LLVM написана на С++. Вот кодогенератор, если интересно https://github.com/llvm-mirror/llvm/tree/master/lib/Target/X86
148 1312791
Анончики, что можно написать на асм? что ты обычно пишите? какой самый крутой проект у тебя был?
149 1312798
Реверсач, сап. Знаю, что меня сейчас обоссут, но лучше помогите! У крестоводов и сибояр есть так называемые фаст-либы, в которых функции это обертки над ассемблерными вставками. Таким образом они повышают производительность, например математических вычислений. Есть ли способ заюзать все это на C#?
while1.png13 Кб, 450x289
sage 150 1312896
>>12772

> поэтому до железа тебя в любом случае не пустят


Это и есть железо. Микрокод много где есть, и если он есть - он неотъемлемая часть проца.

>>12776

> С появлением hex rays у меня наконец-то стало получаться реверсить


Это пока процессор поддерживается рейсами, а процессорный модуль может в систему типов. Но бывает, что все, что у тебя есть - кривой процессорный модуль на питоне, который еще и править приходится. А еще если ты случайно забудешь где-то volatile, или случайно добавишь лишний const, HexRays спокойно выкинет у тебя из функции большую часть логики или парочку вызовов функций, или свернет while до if.

> потому что асмовскую поеботу я вообще не воспринимаю


А ты, не зная асма, не сможешь даже заметить перечисленное, не то, что решить проблему.

>>12772

> лучше знает компилятор


Пикрелейтед. На самом деле это древняя VS2005 и еще какой-то баг в компиляторе, потому сам пикрелейтед был собран с /Od, а в той программе, что я реверсил, качество кода вокруг цикла намекает на сборку с /O2 или /Ox.

>>12798
pinvoke?
151 1312953
>>12798

>Есть ли способ заюзать все это на C#?



Есть, но смысла нет - проблемы с производительностью сисярпа и любого другого безопасного языка не в качестве компилированного кода, а в многочисленных обёртках с проверками на каждый чих.

> Анончики, что можно написать на асм?



Буткод для операционной системы разве только, там есть определенные команды, которые нужно именно из асма дергать, что бы проц в защищенный режим c нужной разрядностью перевести, да виртуальные машины - там нужно тоже пару специальных опкодов дергать.

Да и то первое было актуально во времена обычного биоса до UEFI, сейчас UEFI уже с бута мбр на блюдечке защищенный режим подгоняет.
152 1312957
>>12896

>А ты, не зная асма, не сможешь даже заметить перечисленное, не то, что решить проблему.


._.
Ну на самом деле да. Но реверсинг это, пожалуй, единственное применение асма.

На пике надеюсь O0?
153 1313028
>>12957

>Но реверсинг это, пожалуй, единственное применение асма.


Эксплуатоиты писать.
Да и вообще что угодно
154 1313178
Че ебать у вас как много надо знать? Архитектура, асм, операционки, кресты с сями, пиздец какой-то.
155 1313192
>>13178
Скачай HiAsm, там особо много знать не надо.
156 1313277
>>13028
Енто и есть реверсинг, он имел ввиду. Идея в том, что ничего нормального, типа стендалон апп не напишешь на асме.
157 1313281
>>13277
До сих пор пишут в эмбедде, и много. Не очень понимаю, зачем, правда. Ну и всякие загрузчики надо самому писать на нестандартных девайсах
158 1313293
>>13277

>стендалон апп не напишешь на асме


WAT?
159 1313324
>>12957
Да, на пике O0 (в студии это Od).

>>13277

> стендалон апп не напишешь на асме.


Не не напишешь, а нет смысла писать.
160 1313466
Как я понимаю ассемблер теперь не нужен.
161 1313469
>>13466
Уже лет 20 как, лол.
162 1313671
>>13466

>теперь


Ты потерял ссылку на новость, в которой изобрели ИИ?
Что там внутри? 163 1313703
Писать простейшие программы формата PE, типа "Hello, world!", оказалось несложно: подключил msvcrt.dll с помощью макросов из import32.inc, импортировал методы — профит. Но что из себя представляют эти функции? Например метод exit: как он работает? Программа должна как-то обращаться к ОС, но засчет чего это происходит? С форматом MZ вроде ясно — вызываешь прерывание DOS, а система интерпретирует это как призыв к действию и выполняет какой-то свой код (хотя тут тоже не ясно, что именно происходит дальше, но, по всей видимости, работа с машиной на низком уровне, с этим еще можно разобраться). А вот с PE не очень понятно, где эта точка соприкосновения с системой, когда мы говорим ей "сделай ЭТО, шиндовс". Объясните это, пожалуйста, если не трудно.
164 1313710
165 1313722
>>13710

> Базовые функции реализованы в динамически подключаемых библиотеках kernel32.dll и advapi32.dll; базовые модули графического интерфейса пользователя — в user32.dll и gdi32.dll


У меня все еще вопросы:
1) Выходит, я не могу написать 32-битную программу без использования этих библиотек, или других, использующих первые, так?
2) А что тогда содержится в самих dll, если это — базовые функции? Код, который выполняется системой на самом низком уровне при работе непосредственно с машиной?
3) В msvcrt.dll функции тоже базовые, или выполняются не без использования kernel32.dll?
166 1313726
>>13722
Это уже не по асму вопросы, а по устройству системы.

1. Можешь, но kernel всегда будет проецироваться в твой адресный процесс
2. Просто функции (библиотека, понимаешь?). Иногда может и сквозь HAL в самый низ уйти.
3. По-разному.
167 1313728
>>13703

> Например метод exit: как он работает


> вызываешь прерывание DOS


exit сбрасывает буферы файлов, выполняют прочую деинициализацию и под конец дергает ExitProcess(), это уже Windows API. ExitProcess делает NtTerminateProcess, который вызывает примерно такое же прерывание, как в DOS (int 2e). Но на самом деле через прерывания ходить в ядро медленнее, поэтому в современных ос оно делает sysenter. Ну и там дальше уже ядро разбирается.

>>13722

> Выходит, я не могу написать 32-битную программу без использования этих библиотек, или других, использующих первые, так?


Ты можешь напрямую дергать ядро, но номера системных вызовов ("функций" прерывания, если брать DOS-овые аналоги) меняются от версии к версии, поэтому такой код как минимум может не заработать в очередном билде винды. И неудобно это.

> что тогда содержится в самих dll, если это — базовые функции


Некоторые функции целиком реализованы в юзерспейсе. Другие - обертки, которые делают работу с системными вызовами более удобной.

> msvcrt.dll функции тоже базовые, или выполняются не без использования kernel32.dll?


Сводятся к kernel32.dll. MSVCRT, как следует из названия (MS Visual C RunTime) - это вообще сишный рантайм, реализующий функции, которые требует реализовывать сишный стандарт, к Windows оно имеет лишь то отношение, что в комплекте винды куча софта, написанного на Си, и которому этот рантайм был нужен. Был - потому что свежие рантаймы лежат в SxS, а этот древний, от шестой вроде студии.
168 1313729
>>13726

>Просто функции


Не очень понял, там имеется реализация этих базовых функций?
169 1313735
>>13728
Спасибо, вроде что-то понял.
170 1313883
Где мне можно достать IDA pro 7 под линь? Или через вайн придётся запускать?
171 1313885
>>13883
Ну 6.8 хорошо под вайном бегает
172 1314067
image.png24 Кб, 548x381
173 1314081
Привет, аноны. Объясните, пожалуйста, как работает static linking. Решил поэкспериментировать (пикрил), но програмка крашнулась. Что не так? Ну, то есть понятно, что не рационально впихивать весь dll в приложение, где используются только две функции, да и смысла линковать статически конкретно эту библиотеку нет, но разве это не должно было сработать? Значения getch и exit — entry point'ы, взял их из dependency walker.
Стикер512x512
174 1314087
>>14081
Уууу, бля.
Надеюсь тот анон, что любит простыняшами отвечать, захочет написать как сильно ты не прав.
175 1314111
>>14081
Подозреваю, что ты пытаешься исполнять данные, а не код
176 1314114
>>14111
А что, реализации там нет? =(
177 1314132
Где можно посмотреть список какой инструкции соответствует какая команда?
178 1314136
>>14132

>какой инструкции соответствует какая команда


Штабля?
Может какой опкод какой команде?
179 1314140
Почему при запуске скомпилированной сишной проги она не зависвает, ведь по сути там будет программа которая бесконечно jmpает на себя.
180 1314144
>>14136
ДА!
181 1314148
182 1314150
>>14148

>https://en.wikipedia.org/wiki/X86_instruction_listings


СПАСИБО БРАТУХЕН ТЫ КРАСАВА
183 1314151
>>14140
Потому что ты не вызываешь _myfunc?
184 1314152
>>14148
Их так дохуя что ли. Ебать конечно карась.
185 1314153
>>14081
>>14087

> Уууу, бля.


Вот у меня абсолютно точно такая же реакция. Короче, так оно не работает по двум с половиной причинам:
1) Когда винда грузит библиотеку, это не значит, что она просто выделяет память и тупо копирует туда файл. Она парсит много всяких структур и выделяет память сложно. Пересказывать весь формат PE я не буду, лучше найти какую-нибудь готовую статью. Но очевидная проблема в том, что файл на диске отличается от образа в памяти.
1.5) Кроме того всяких вещей, связанных с загрузкой собственно образа, загрузчик также выполняет динамическую линковку (связывание), т.е., пробегается по импортам длл и впатчивает в них адреса тех функций, которые импортируются. До этого попытка вызвать любую импортированную функцию приведет к крашу (там есть некоторые исключения с привязанными длл, о которых я лучше промолчу).
2) Кроме загрузчика, еще и сама длл обычно производит всякую инициализацию, получая управление в DllMain в разные моменты своей жизни. Естественно, ненициализированная длл работать не будет.

В любом случае, статическая линковка - это не просто включить файл. Это еще и разрешение внешних ссылок, и выделение памяти под .bss, и обработка релоков, и куча других мелких задач. Подлинковывать какой-нибудь .obj без внешнего линкера современным FASM-ом теоретически можно (с ограничениями), но это совсем не две строки, и вообще это извращение.

>>14140
Ты все делаешь не так. Ты не выделил память под функцию, ты не пометил память, как исполняемую, ты читаешь с "r" вместо "rb".
186 1314159
>>14148
Как понять, под какой архитектурой компилировалась программа?
187 1314160
>>14159
Посмотреть в заголовке исполняемого файла.
188 1314161
>>14153

>Ты все делаешь не так. Ты не выделил память под функцию, ты не пометил память, как исполняемую, ты читаешь с "r" вместо "rb".


Сделал все по заветам твоим, но сосу.
189 1314162
>>14159
Под какой компилировалась - никак (ну разве что линкер строчку с путем оставит или что-нибудь еще). Под какую - обычно указано в одном из полей заголовка исполняемого файла. Например IMAGE_NT_HEADERS.FileHeader.Machine для PE или ElfXX_Ehdr.e_machine в ELF.
190 1314163
>>14160
Тебя Егор зовут?
191 1314164
>>14160
Да, я дурак, спасибо.
Алсо, очень сложно. Даже хелло ворлд нормально прочитать не могу.
zzz49.jpg52 Кб, 360x480
192 1314165
>>14163
Называй меня королем собак.
193 1314166
>>14161

> Сделал все


> ты не пометил память, как исполняемую


То, что ты там в ассемблере что-то написал, влияет только на бинарник, который ты из него слинкуешь. А пометить надо память, которую ты маллоком выделил (может не получиться на системе с селинуксом). Алсо, ты точно в чистый бинарник компилируешь, а не пытаешься грузить elf или coff?
image.png7 Кб, 821x98
194 1314168
>>14166
nasm main.asm просто компилировал
195 1314169
>>14168
Ну тогда mprotect или VirtualProtect, или что у тебя там за ОС.
196 1314170
>>14166
Я думаю он сам особо не понимает что делает.
Мог бы сразу написать 0xEB, 0xFE и не мучиться с файлами.
197 1314173
>>14170
Я не понимаю что делаю. Я мог бы написать 0хЕВ и 0хFE и не мучиться с файлами.
198 1314174
>>14161
Лол. Я только сейчас заметил, что там еще и
ptr = (char★)c;
Возможно, стоит начать с изучения Си сначала?
199 1314175
>>14174
Это случайность, честное слово. Я когда писал код точно хотел заебенить там char приведение.
200 1314176
>>14162
Хорошо, допустим, я нашел. Теперь я могу из hex-файла начать переписывать программу на си/кресты?
80386 PE формат
201 1314180
>>14176
Прямо из хексов? Глазками? Дизассемблирование в уме? Нет, не можешь, иначе не задавал бы таких вопросов. Иду возьми лучше с хексрейсами.
202 1314182
>>14180

>Дизассемблирование в уме?


И дворды ксорить.
203 1314184
>>14182
Дворды херня, это каждый сможет. А к нам 2019 спешит, у нас давно qword-ы.
204 1314185
>>14180
Я нихуя не умею, ладно. Начал RE день назад.
205 1314186
Хочу написать паровоз. Как долго это делать на ассемблере?
206 1314187
>>14184

>у нас давно qword-ы.


Что это? Карасики маленькие?
207 1314288
>>01036 (OP)
ОП, добавь в шапку онлайн-дизассемблер
disassembler.io
208 1314402
>>13281

>До сих пор пишут в эмбедде, и много. Не очень понимаю, зачем, правда.



Потому что капиталисты по-прежнему жадные и им проще нанять усача за 2000-4000 евро в месяц без учета налогов чтобы тот применив более дешманский МК сэкономил своей байтоеблей от 2 до 20 евро на каждую сраную стиралку/, что при умножении на количество произведенных стиралок дает уже миллионы сэкономленых евреев в зарплату топманагеров и в доход акционеров.
209 1314756
сделал поиск по треду: gas
ничего не нашел
Разве будущее не за ним?
210 1314772
Есть бинарник от микроконтроллера mc9s12x. У него страничная организация флешпамяти. Как правильно указать IDA работу с таким видом памяти?
image.png4 Кб, 515x149
211 1314777
Как сделать, чтобы ИДА писал в псевдокоде хексы, вместо дец. заебался калькулятором конвертить
212 1314801
>>14777
<H> или правый клик. Алсо, в настройках декомпилятора есть default radix.

>>14756
Нет.
image.png4 Кб, 287x188
213 1315041
>>14801

>в настройках декомпилятора есть default radix


Не нашел, я пытался, честно.

Эти аррей акссессы меня путают, к примеру, this - тип char ^, this_ptr - int ^.
И this_ptr[0x374] != this[0x374], это очень мешает, можно, настроить, чтобы было в виде ^(this + 0x374) или ^(this_ptr + 0x374 * 4). А то менять все типы под char, дабы оффсеты совпадали будет как-то не очень.
214 1315181
>>15041

> Не нашел, я пытался, честно.


Edit->Plugins->Hexrays->Options, справа.

> Эти аррей акссессы меня путают


А зачем ты их оставляешь? Делай структуры сразу, без этого крестокод практически невозможно реверсить. Офсеты для отладки будешь подсматривать наведением мыши или табом в дизасм.

> this_ptr = this


Тыкай x на this_ptr, чтобы удостовериться, что он присваивается только один раз, тыкай =, мапь на this. Чем чище код, тем легче в нем разбираться.
215 1317613
Анончики, как справляться с чувством ниосиляторства во время изучения этой всей байтоебли? Хочу быть байтойобой и ахуенным спецом, а не тырпрайз макакой... но сложности в обучении каждый раз подводят к тому, чтобы дропнуть все к хуям и вкатываться в тырпрайз. Какие есть советы по этому поводу?
216 1317614
>>17613
Ты правда думаешь, что тырпрайз проще байтоебли?
217 1317615
>>17614
Думаю да. Разве нет?
218 1317696
>>17613
Начни прикладывать свои навыки где-то. Никто не занимается этим дрочем просто "чтобы быть классным спецом и получать свой косарь".
219 1317779
>>17615
Когда я в конце 90х делал реализацию просмотра JPEG в DOS на чистом asm'е без FPU (ДКП с fixed point это тот еще пиздец), это было в разы проще, чем выучить ебаный Spring Framework для ебаной Java.
220 1318021
>>17779

>без FPU


Зачем? Хардкор ради хардкора?
221 1318049
>>18021
Может его могло и не быть на тех процессорах, на которых исполнялась его программа.
222 1318089
>>18049
В конце 90-х уже SSE на пороге стоял.
223 1318191
>>17696
Куда прикладывать то? Я практикуюсь реверсить разные хеллоуворды и крякми, ctf-ки решаю. Еще пробовал малварь анализировать, но сэмплы негде брать.
224 1318205
>>18191
Малварь не так интересно сейчас разбирать. Можешь на https://www.malwaredomainlist.com/mdl.php сходить и набрать себе на любой вкус поделок с платной чисткой фемидой+вмпротект.
Но будут там в основном всякие агенты, майнеры да поделки на дотнете.
Это раньше весело было увести у пинчевода логи, а то весь ботнет сразу. А сейчас только ctf'ные крякми еще как-то будоражат кровь.
225 1318263
>>18021
Демосцена ебать её... в итоге посаженное зрение и куча потерянного времени. Не повторяйте моих ошибок пацаны.
226 1318274
>>17613
Я ваще поддерживаю тырпрайз виртуальную машину со своим ассемблером, это не совсем непересекающиеся вещи.
227 1318392
А можно тут попросить помощи? С темой треда относительно пересекается. Есть одно задание по какому-то ctf, категории pwn, с++ прога под Линукс. Хочу, собственно, его решить. Идей нет никаких, хотя довольно долго сижу. Пару предыдущих заданий я там осилил - переполнение, подмена rip, уехали куда надо.
Исходник: https://pastebin.com/GcaWX8aE
228 1318421
>>18392

> С темой треда относительно пересекается


Каким местом? Это какая-то сраная олимпиадка, там даже to брутить не нужно.
sage 229 1318464
>>18421
Ну ок, я не прав, это не просто сраная олимпиадка, а уязвимая сраная олимпиадка, там проверка после find кривая, и можно запатчить длину строки, ну и дальше дело техники.
230 1318472
>>18464
Так и надо уязвимость эксплойтнуть. Спасибо за наводку
231 1318480
>>18464
>>18472
Хотя я честно говоря не понял, как именно. Ну увеличили мы длину строки, туда попал мусор. А толку?
sage 232 1318481
>>18480
Строка на стеке, его можно дампить, искать там нужные байтики и менять их местами, например.
233 1318482
>>18481
Звучит жестко, спасибо. Постараюсь доковырять.
sage 234 1318524
>>18481
А вообще там же replace есть, с ним все еще проще. Ну это если условия тепличные в виде отключенного ASLR.
235 1318553
Завезу контента. И полезно и смешно!
https://www.youtube.com/watch?v=HlUe0TUHOIc
sage 236 1318597
>>18553
1) Было уже.
2) Кто-то правда пользуется графом в IDA? Зачем?!
237 1318649
>>18597
Быстро понять структуру программы
238 1318795
Что можно почитать про уязвимости уровнем повыше переплнения стека и буфера?
sage 239 1318816
>>18795
Книгу.
240 1318962
>>18795
Блог Google Project Zero, например. А потом статьи про все встече
241 1318963
>>18962
...нные непонятные слова.
15461853636730.png331 Кб, 566x536
242 1319041
Здравствуйте, я хочу учить ассемблер и Си для способствованию развития в реверс-инжиниринге.

Моя цель, будучи жителем далекой провинции, выточить напильником из технического и металлического мусора установки для выпуска строительных материалов на основе мусорных отходов, песка, камней, щебня и т.д. За основу хочу взять существующие разработки и с помощью реверс-инжиниринга догадаться как они работают, создать близкий аналог из технического и металлического мусора. После чего построить себе хижину орков из полученных строительных материалов.

Из этого вытекают следующие вопросы:
1) Какие языки программирования надо учить для подобного реверс-инжиниринга? Достаточно ли ассемблера и Си?
2) Насколько углубленно надо учить матан для такой цели? Хватит ли стандартного курса отечественных ВТУЗов?
3) Если я в будущем построю потенциальную хижину, то ко мне сразу на разборки приедут провинциальные коммерсы качать права за то, что я из мусора построился, а не купил у них стройматериалы как все. В связи с этим, какое боевое искусство учить, чтобы по голове сильно не били на тренировках, но чтобы можно было защитить мою потенциальную хижину от разборок коммерсов? Подойдет ли тэквондо ITF, там, вроде, сильно нельзя бить?
4) Как грамотно совместить тренировки, получение умений в программировании и в слесарном деле? Ведь надо будет быть достаточно сильным, чтобы быть готовым к тому, что коммерсы на разборки ездить будут. И достаточно квалифицированным, чтобы создать необходимые установки.
image.png97 Кб, 847x528
243 1319476
Анончики, поясните за TLS-callback и почему о нем умалчивают. Пикрил, таблица CreateProcess из книги Windows Internals. Здесь сказано, что CreateProcess передает управление сразу к Entry Point. А где тогда находится TLS?
244 1319509
>>19476
Вот тут:

> Заключительная инициализация процесса.


все только начинается: вызываются не только TLS-колбеки, но еще и дллки грузятся, вызываются их entry-point-ы и т. д. Но это все частности, поэтому их опускают.
245 1319555
Есть одна программа. Она выделяет память через calloc, но не проверяет, сколько запрашивает пользователь. Так вот, пихаем -1, calloc возвращает NULL ака 0x0. Так как случилось переполнение size_t - прога считает, что предел у нас уехал в максимальное значение 64бит. После этого пользователь может запросить любой элемент массива, но так как мы сломали предел, и указатель на массив 0x0 - мы можем прочитать любой доступный кусок памяти. Так вот, пытаюсь таким образом прочитать стек (подсовывая в качестве индекса адрес начала текущего фрейма стека, найденного через отладчик, конвертированного в десятичное число) - выпадает с SIGSEGV, хотя вроде как не должно. Где я накосячил?
246 1319557
>>19555
Вот скрины. В данном случае пытаюсь прочитать сохраненный rip, но выпадает SIGSEGV, хотя, по идее, по адресу 0x0 со смещением 0x7fffffffe888 находится наш стек и сохраненный в нем rip.
247 1319726
>>19557
rax*8
ебать в рот gdb и at&t
248 1319727
>>01036 (OP)
Сап.
Вопросы касаются архитектуры ПК.
1. Что в иерархии памяти находится ниже? Магнитные или оптические диски? Из этого вытекает 2 вопроса: что стоит дороже и работает быстрее.
Я ставлю на то, что ниже находятся оптические диски, но пруфануть не могу.
2.
Если запрос к L3 не приносит результата, он передаётся во внешнюю память:
а. По шине DDR3
б. По шине PCI
в. Запрос никуда не передается
Про шину DDR3 я слышу впервые, в гугле тоже ничего не нашел. Однако есть шина данных.
Казалось бы, в случае кэш-промоха, идет обращение к ОЗУ, по шине данных, значит ответ по шине DDR3
Но идет речь о внешней памяти, которой ОЗУ не является, хотя если внешней памятью считается все что за цп - тогда ок.
В общем здесь я уже даже не знаю.
249 1319731
>>19727
Лучше в /hw/ спроси, это слишком низко даже для асма.
250 1319744
>>19726
Блять. Спасибо. Буду теперь в Иде перепроверять выхлоп gdb. Это было довольно неочевидно.
251 1319760
>>19744
Есть radare, если что.
252 1320065
>>19731
Не думаю что там помогут.
Остановился на PCI (cpu -> pci host bridge -> RAM) и оптических дисках.
253 1320163
>>19726

> ебать в рот gdb и at&t


set disassembly-flavor intel в .gdbinit и забыть AT&T как страшный сон пробовал?

>>19727

> Что в иерархии памяти находится ниже? Магнитные или оптические диски?


А одинаково. Если для твоего препода имеет значение технология хранения - с ним что-то не так.

> Если запрос к L3 не приносит результата, он передаётся во внешнюю память


Зависит от того, что именно висит в этом регионе памяти.
254 1320198
>>20163

>А одинаково. Если для твоего препода имеет значение технология хранения - с ним что-то не так.



Не одинаково.
Вопрос не про технологию хранения, а про так называемую иерархию памяти, ничего странного в нем нет. Вопрос же "к чему быстрее скорость доступа: к регистрам, к озу" не звучит же странно, хоть ответ и очевиден. Даже если вдруг, появятся (если не уже появились) оптические диски, которые работают быстрее магнитных - иерархия памяти не изменится, и согласно ей, оптические диски все равно будут медленее.

По поводу L3 кэша, имеется ввиду, что нужно лезть в ram(скорее всего), вопрос только по какой из шин.
Я нашел 2 варианта:
a) cpu -> pci host bridge -> ram (какой-то древний)
b) cpu -> data-bus -> ram
255 1320319
>>20198

> оптические диски, которые работают быстрее магнитных - иерархия памяти не изменится, и согласно ей, оптические диски все равно будут медленее


То есть этот способ классификации ничего реально не отражает, и придуман двумя-тремя теоретиками, которые даже друг с другом не в состоянии договориться.
На самом деле, оптические диски можно поставить ниже по иерархии не из-за скорости, а из-за того, что они съемные, т.е., не постоянно онлайн, точно так же, как и всякие стримеры нет, не те, которые рожей на твиче светят.
256 1320435
>>20319
Ну, скажем, насчет ничего реально не отражает это спорно. Все вполне разумно до уровня ЖД. А вообще да, придуман кукоретиками, с этим не поспоришь.
257 1320538
>>20319
Дело не в том, что они съемные. HDD тоже может быть съемным. Оптические диски очень не любят перезапись. Лучший формат работы с ними - стереть полностью, записать. В этом плане у них чтение более-менее рандомное, а вот запись ближе к стримерам.
Иерархия, конечно, из манямирка, но определенный смысл в этом есть.
258 1320558
>>20538

> Оптические диски очень не любят перезапись


Флеш тоже не любит перезапись, и подход там в некотором смысле аналогичен оптическим дискам: писать каждый раз в новые (пустые) страницы (как в сессии на CD/DVD), а грязные блоки тереть в фоне или по необходимости. Значит ли это, что флеш в этой вашей иерархии ниже CD? В моем манямирке, например, он был бы выше HDD из-за практически бесплатного random access. Да и вся эта иерархия должна/упирается в random access. Чем сложнее, тем ниже.
259 1320595
>>01036 (OP)
Давно здесь https://beginners.re/ книгу стали раздавать только на почту?
# OP 261 1320605
>>20595
В прошлом году всё было нормально.
262 1323047
Если я вызову какую-нибудь функцию (допустим, Beep из kernel32) с помощью invoke, введенные в стек параметры ф-ии будут вытолкнуты, но будут ли сохранены значения регистров? Или это необходимо сделать самостоятельно?
263 1323058
>>23047

> самостоятельно


Да, ищешь что такое stdcall и читаешь.
esi, edi, ebx сохранятся
264 1323064
>>23058
Я правильно понимаю, что stdcall — это только про автоматическое выталкивание параметров из стека? А про регистры я ничего не нашел (inb4: плохо искал). Где искать информацию о том, какие регистры будут затронуты той или иной функцией?
265 1323473
>>23064

> плохо искал


this

google: wikipedia x86 calling conventions
google: msdn calling conventions microsoft перепидорасила документацию, теперь из исходной статьи нужно кликнуть по argument passing and naming conventions

> А про регистры я ничего не нашел


Стандартно для всех конвенций в x86 (32-битный код): при возврате DF должен быть сброшен, а EBP, EBX, ESI, EDI восстановлены, если ты их трогал. Вот если у тебя внутренняя фукнция (например, ты похукал что-то неэкспортируемое), тогда никаких гарантий или общих требований нет - может понадобиться и ECX/EDX схоронить иногда, это уж как компилятор код сгенерит.
266 1324091
Не тот тред, наверное, но тут разбираются. Решаю я задачи из всяких ctf, категории pwn, в которой нужно вскрыть программу и написать эксплойт, чтобы забрать флаг. Так вот, столкнулся с проблемой. Есть одна программа, я могу управлять ее стеком, ну и соответственно адресом возврата и сохраненными регистрами. Elf x64, включены защиты (PIE, NX, Stack Canary). Я бы не растерялся и устроил ROP-цепочку, разрешил бы исполнение стека и не парился, но в коде нет сисколлов. К программе прилагается еще и libc, т.е, наверное, предполагается, что я должен воспользоваться функциями оттуда, но так как еще и ASLR работает (не знаю, должен ли он быть по условиям, но у себя не выключал) - я не могу просто прыгнуть по адресу libc + смещение нужной функции.
Что можно сделать в такой ситуации? Есть ли что почитать?
267 1324111
>>24091
А, и Full RELRO тоже включен, но тут это уже наверное роли не играет.
268 1324119
>>24091
Без кода сложно, но

> ASLR работает


и

> я могу управлять ее стеком


может быть, ты можешь раскрыть адреса, получив содержимое стека?
изображение.png3 Кб, 453x115
269 1325177
>>24119
Спасибо. Осталось немного.
270 1326382
С полного нуля можно вкатиться?
271 1326396
>>26382
Изучи программирование немного, например Си. Потом уже можешь beginners.re читать.
272 1326414
>>26396
А без си никак нельзя?
273 1326422
>>26414
Ты хочешь бегать без ног?
nano-animation-web.gif279 Кб, 256x256
274 1326425
>>26422
Просто скинь литературу.
275 1326438
>>26382
Asm обычно осваивают с нуля. Так как это самый низкоуровневый из человеко-понимаемых языков. В 20 веке конечно и на машинных кодах писали, но сейчас такие вряд ли существуют.

Тебе не зря советуют изучать еще и Си. Так как писать на ассемблере ты все равно не будешь. Это утомительно, да и не особо нужно. Зато в связке с Си, это может помочь понять, как программы транслируются из высокоуровневых языков в инструкции процессора, через ассемблер.
276 1326439
>>26425
Курс молодого бойца (язык Си) http://cs.mipt.ru/c_intro
277 1326576
>>26438
Двачую. На асме обычно вставки делают, пару другую функций и все.
278 1326588
>>26439
По ассемблеру. Если бы мне нужен был си, я бы пошёл в другой тред
279 1326623
Я ничего не понимаю, почему так сложно? В первой дизассемблированной строке программа делает push 0xffffffff
Во второй push 0x4841а
Операнда нет, как понять зачем, нигде не написано.
Пойду грузчиком работать.

>>26588
beginners.re имеет два названия. Реверс инжиниринг для начинающих и понимание языка ассемблера. Так что пробуй его.
sage 280 1326685
>>26623

> Операнда нет, как понять зачем, нигде не написано.


Показывай код. Или сам смотри, что будет дальше - если вызов функции, то смотри, что эта функция будет делать с аргументами. А может это просто SEH-фрейм, если вызова функции нет. В любом случае, понимание кода с неба не свалится, чтобы понять зачем, надо сидеть, смотреть, что происходит и постоянно пытаться понять. Вангую, что ты во втором пуше пропустил цифру. Особенно если это винда.
281 1326711
>>26685

>Показывай код


https://pastebin.com/Xd3JWGFg

>во втором пуше пропустил цифру


Да

>если это винда


Да, это PE.
282 1326717
есть ли перспектива реверс-инженера? если да то какая? был ли опыт удаленки у кого нибудь?
как стать успешным и зарабатывать 300к\сек?
sage 283 1326817
>>26711
Бляяя, еще и AT&T, фу таким быть. Я угадал про SEH. Там пушится -1 (для exception level вроде, это крестовая фишка), потом адрес нового обработчика исключений и адрес фрейма предыдущего хэндлера, чтобы сформировать linked list. Получившийся фрейм обработчика пишется в _NT_TIB (fs:0), чтобы винда о нем узнала (потом он удаляется перед ret в обеих ветках). В принципе, весь этот код можно по большей части просто игнорировать, но если ты хочешь узнать подробнее, в сети полно туториалов про внутреннее устройство SEH и про обработку исключений в C++. А вот дальше по 401015 там начинается уже какая-то настоящая работа, вызываются какие-то функции, на которые нужно смотреть, чтобы понять, что делает эта. Я бы на твоем месте выкинул objdump - он пригоден максимум для инспекции сгенерированного компилятором кода, и взял бы вместо него IDA, которая для людей или хотя бы r2, который не для людей.
284 1326837
Сколько вы зарабатываете?
285 1326841
>>26837
Тысяч 50 в Москве и меньше в мухосрансках. Боги получают сотни кесов, впрочем как и везде.
sage 286 1326842
>>26817

> еще и AT&T


Извините

>я был прав это SEH


Спасибо большое, почитаю
>ida pro
У тебя случайно слитой 7.2 версии нет от китайцев? Говорят там inheritance завезли.
sage 287 1326862
>>26842

> Говорят там inheritance завезли.


Очень плохо завезли, мне не понравилось. Обычное крестовое наследование, которое struct foo : bar { ... } уже давно есть, но оно неудобное, поэтому подход с созданием трех struct (struct ClassName { ClassNameVtable ptr, ClassNameFields fields }) по-прежнему рулит.
288 1326895
>>26717
Нет, никакой, нету, никак.
289 1327611
>>01036 (OP)
https://mega.nz/#!Bc9VVAYC!Vk6CFlW6VIoskLNgDKXbsL6FacDQeOKe6LX92wNicKY
Я совсем криворукий ебанат или у всех файл скачивается но внутри он пустой ?
sage 290 1327614
>>27611
Тебе вьювер 404 показывает при попытке открыть?
1) Правой кнопкой, свойства, разблокировать, опционально положить в директорию с путем, не содержащим странных символов (мало ли, может ты китаец).
2) Или можешь взять какой-нибудь 7-Zip, и распаковать .chm-ку им.
3) Или можешь смотреть в SumatraPDF, а не в дефолтном вьювере.
291 1327615
>>27614
Большое спасибо Sumatra помогла ♥
292 1327869
>>27611
его кстати вирустотал ругает говорит бэкдор
293 1327980
>>27869
ты что совсем еблан ? :D
294 1328065
>>26841
Ну я так и знал, что у вашего брата зп хуйня полная
sage 295 1328092
>>27869
Там еще примеры в комплекте. На какой-то из них и агрятся. Я же предлагал распаковать chm и посмотреть.
sage 296 1328283
Есть RGB-мышь, сложно ли под нее будет написать ПО, чтоб самому управлять цветом/временем его переключения/зависимость от событий и т.д.
297 1328289
>>28283
Снифаешь USB чем угодно (например, USBlyzer или даже просто wireshark), берешь libusb, пишешь. Если окажется, что винда не дает работать с HID из юзермода, пишешь драйвер или реверсишь драйвер производителя железа.
sage 298 1328290
>>28289
Спасибо за быстрый ответ и наводку.
299 1328415
Когда вы уже все сдохнете со своим старьем?
300 1328422
>>28415

> Когда вы уже все сдохнете со своим старьем?



Никогда.

А вот что абстрактушки будут делать в ближайшие пару лет (а у них на носу полный конец развитию кремния по муру и заканчиваются техпроцессы, напомню) - вот это действительно вопрос.
301 1328424
>>28422

Будем развивать компиляторы, добавлять в них ИИ на нейросеточках и машинном обучении и в оконцове победим байтоёбство оптимизаторным оптимизатором, который сможет лучше любого байтоеба код оптимизировать.

А вот вы скоро станете не нужны. Как только наш умный компилятор сможет скомпилить микросервис на Rustе в восьминогую Attiny на 4кб.
302 1328427
>>28422
Что тебя заставляет байтоёбить?
Разве может адекватный человек такой хуйней заниматься?
303 1328536
>>28427
Адекватный чему?

>>28424
Мечта любого русского - ковер-самолет и скатерть-самобранка.
images.jpeg9 Кб, 305x165
304 1328945
Как люди находят находят уязвимости на Pwn2Own? какие скилы нужны для этого? щас дохуя технологий, думаю нет смысла учить все подряд, а нужно сфокусироваться на чем-то одном. Как думаешь анон?
305 1328994
>>28945
Правильное питание, спорт, здоровый сон и регулярный секс это все что нужно.
306 1329018
>>28536
Зарепортил подпиндосного русофоба и нацпредателя.
Жди гостей.
307 1329035
>>28994
а дальше?
308 1329042
>>29035
А дальше в монастырь.
sage 309 1329091
thread.c:1019: internal-error: void finish_thread_state(ptid_t): Assertion `tp' failed.
@
A problem internal to GDB has been detected,
@
further debugging may prove unreliable.
@
Quit this debugging session? (y or n)

Сука! Как же я ненавижу ваш прыщеблядский gdb!
310 1329123
>>29091
Попробуй edb/r2
311 1329172
>>01036 (OP)
Но ведь, если я тру зондофоб мне же энивей придется создавать свой ЯП с нуля. Откуда я знаю что в ваших FASM.EXE не вшит руткит от васяна? И вы тоже этого знать не можете. А иначе ваш асм нахер не нужен. Поэтому в чём полезность? Набраться опыта перед написанием своего продукта?
312 1329175
>>28415
Нет, ты
313 1329276
>>29172
Исходники полностью открыты. Берешь тот же самый фасм и собираешь из исходников. Я проверял.
Ну, конечно на этапе сборки можно что угодно добавить и без исходников. Да и тысячи строк на ассемблере не перечитать.
Но минимальное приложение генерится байт в байт.
Главное верить.
sage 314 1329622
>>29172

> И вы тоже этого знать не можете.


fasm достаточно небольшой, а взаимодействия с системой там настолько мало, что можно взять дизасм и поискать руткит от васяна самостоятельно.
315 1329642
Прочитал Reverse Engineering для начинающих из шапки. Есть книги посвежее? 2015-2018 год, желательно для x64 архитектуры?
316 1329665
>>29642
В этой области ничего не меняется десятилетиями, ничего принципиально нового ты в свежей книжке не найдешь. Если тебе нужен x86-64 ассемблер, так и ищи книгу по ассемблеру, их дохуя. Если интересно про реверсинг, почитай SAT/SMT by example от того же юричева, что-нибудь про скриптинг ida (и про ее микрокод), про инструментирование, про всевозможные frida и прочие unicorn. Все гуглится по кейвордам, но в основном это не книжки, а выступления, слайды и статьи.
317 1329676
Никогда не писал на ассемблере, на Си и плюсах тоже. В общем не знаю ни про регистры, ни чего такого низкоуровневого. Столкнулся с протоколом MODBUS. Ничего не понимаю. Книг и статей на эту тему почти нет. Посоветуйте что делать, что читать, как практиковаться?

Цель понять разницу между микроконтроллером, промышленным контроллером, микропроцессором, ПЛИС, ПЛК, IOT, СБИС, короче вот это вот все. Понять как их программируют. И понять как программировать управление устройствами по MODBUS.
318 1329728
>>29622

>Использовать один руткит чтобы прочекать смежный


Понел, ребят ))
sage 319 1329745
>>29728
Все врут! А еще в процессоре бэкдоры. Используй таблички в мануале от интела и декодируй инструкции вручную. В бумажке с ручкой бэкдоров пока вроде не находили?
320 1329807
>>29745
Intel ME норм бэкдор, не спрячешся.
321 1329816
>>29676

>микроконтроллером


Маленький процессор со своим ПЗУ.

>промышленным контроллером


Здоровая дура, рулящая технологической линией. Программируется на визуально понятном васяну-слесарю языке, а не на С.

>микропроцессором


Строгое определение не дам, в большинстве случаев взаимозаменяемо с "микроконтроллер

>ПЛИС


Программируемая логическая интегральная схема. СБИС, стуктуру которой можно изменить доступным оборудованием. Не лезь пока сюда.

>ПЛК


То же, что и промышленный (логический) контроллер

>IOT


Маркетинговый термин, обозначающий чайники с подключением к интернету. Забудь его нахуй.

>СБИС


Сверхбольшая интегральная схема. Вся современная электроника кроме ПЛИС является СБИС, хотя понятие "сверхбольшая" устарело, т.к. термин введён при царе горохе.

https://radiokot.ru/start/mcu_fpga/avr/ - это ответит на некоторые вопросы.
Если есть время и деньги, купи ардуино и ковыряйся с ним по урокам с ютуба.
В любом случае, микроконтроллерами занимаются в /ra. Спроси там, они тебе укажут путь.
322 1329821
>>29816
Большое спасибо.
323 1329824
>>29816

> Маленький процессор со своим ПЗУ.


Главное в нем не пзу, а наличие готовых интерфейсов для ввода-вывода, обычно разнообразных. Чтобы было чем микроконтроллировать.

> хотя понятие "сверхбольшая" устарело


Хуй знает, я периодически встречаю в литературе, но только как VLSI - русскоязычные термины умерли вместе с советским союзом.
324 1329825
>>29824

>Главное в нем не пзу, а наличие готовых интерфейсов для ввода-вывода, обычно разнообразных. Чтобы было чем микроконтроллировать.


Ну в ЦПУ на домашних пеках тоже есть готовые интерфейсы зачастую. Может ты и прав, но в таком случае грань между микроконтроллером и (микро)процессором нечёткая.

>Хуй знает, я периодически встречаю в литературе, но только как VLSI - русскоязычные термины умерли вместе с советским союзом.


Да, но с тех пор эта "большевизна" выросла в сотни раз. Термин используют, но смысл его несколько утрачен.
325 1329828
>>29825

> Ну в ЦПУ на домашних пеках тоже есть готовые интерфейсы зачастую


Ну как бы да, грань стирается, а десктопные CPU все больше превращаются в SoC.
326 1329894
327 1334386
Есть один экзешник, созданный в Delphi 7 и созданный на-отъебись. Из него можно извлечь какие-то метаданные, связанные с создателем? Имя учётной записи, под который была запущена среда разработки, названия объектных файлов etc.
Просто исходники проебались двенадцать лет назад, однао я предполагаю, что они могут быть на одной из подчинённых мне машин.
sage 328 1334387
>>34386
Кидай сюда, посмотрим. Или сам посмотри банальным hex-редактором или strings (от руссиновича или линуксовым). Но максимум, что ты сможешь получить - путь к проекту и, возможно, названия некоторых юнитов.
329 1334769
>>34387
Есть IDA. Вбрасывать сюда пока немножко ссу. Корпоративная хрень, сам понимаешь.
330 1334794
>>29745
В табличках пробелы, а в пробелах тоже зонды!
sage 331 1334815
>>34769
IDA славится своей способностью хуево детектить паскалевые строки. Смотри в strings. Боишься консольки - запусти и посмотри в Process Explorer, там в свойствах процесса есть соответствующая вкладка.
332 1335200
>>34815
Тут лучшим вариантом будет iDR, а не IDA
Что ж творится-то с этими числами с плавающей запятой!? 333 1336604
Почему из порядка E в 32-битном числе с плавающей запятой отнимается 127, я понимаю. Но как оказалось, это происходит только в нормализованных числах. Разобрался в том, что такое нормализованное и денормализованное число, все понял, за исключением одного момента: КАКОГО ХРЕНА В ДЕНОРМАЛИЗОВАННЫХ ОТ ПОРЯДКА ВЫЧИТАЕТСЯ 126!?
image.png16 Кб, 867x409
334 1336611
>>36604
Я еще немного подумал над этим. Кажется, я нашел в этом смысл. Видимо, это происходит потому, что минимальная экспонента в нормализованном числе с плавающей запятой одинарной точности равна 2-126. Денормализованные числа, как я понял, заполняют разрыв между нулем и минимальным значением нормализованного числа.
Минимальное нормализованное число — 1.0 × 2-126.
Максимально денормализованное число — 0.11...11 × 2-126.
То есть, эти два значения находятся почти впритык друг к другу, что было бы невозможно, если бы экспонента в денормализованном числе была равна 2-127.

Сам спросил — сам ответил, мдауш.
335 1336650
>>29676

>Цель понять разницу между


> микроконтроллером



Микросхема

см. микропроцессор+встроенная оператива+встроенная флеш-память+ конфигурируемые ноги+различные аппаратные функции для этих ног, начиная от шима и заканчивая разными портами вроде SPI и USB.

> , промышленным контроллером, , ПЛК



Готовое устройство в большом корпусе на DIN рейку, сделанное из микроконтроллера, защищенной обвязке его ног и предназначенное для установки в шкаф.

Суть ПЛК в том что его можно программировать лишь на 5 упоротых язхыках (3 из них визуальные программировать мышкой, один - абсткрактный ассемблер и ещё один - паскалеподобный). Если коробку нельзя программировать на этих 5 языках и/или она не имеет соответсвующей сертификации - это не ПЛК.

> микропроцессором,



Микросхема, реализующая вычислительное устройство.

> ПЛИС



Программируемая микросхема с аппаратным эмулятором железа. Эмулирует железхо на уровне железа путем универсальных соединяемых ячеек. Применяется там, где идет разработка других микросхем или там где программы на микропроцессоре работают слишком медленно и нужна аппаратная реализация.

, IOT

Баззворд, internet of things. Суть в том что если запихнуть в каждый утюг и вибратор вайфай или другую радиопередающую хуету которая будет соединять с интернетом то наступить всеобщее счастье.

, СБИС

сверхбольшая интегральная схема. Английский аналог - VLSI. В принципе любой чип который ты можешь найти на материнской плате - СБИС.

, короче вот это вот все. Понять как их программируют.

Судя по твоим вопросма - тебе в АСУ тред в /wrk/

И понять как программировать управление устройствами по MODBUS.

Тебе точно в /wrk/
335 1336650
>>29676

>Цель понять разницу между


> микроконтроллером



Микросхема

см. микропроцессор+встроенная оператива+встроенная флеш-память+ конфигурируемые ноги+различные аппаратные функции для этих ног, начиная от шима и заканчивая разными портами вроде SPI и USB.

> , промышленным контроллером, , ПЛК



Готовое устройство в большом корпусе на DIN рейку, сделанное из микроконтроллера, защищенной обвязке его ног и предназначенное для установки в шкаф.

Суть ПЛК в том что его можно программировать лишь на 5 упоротых язхыках (3 из них визуальные программировать мышкой, один - абсткрактный ассемблер и ещё один - паскалеподобный). Если коробку нельзя программировать на этих 5 языках и/или она не имеет соответсвующей сертификации - это не ПЛК.

> микропроцессором,



Микросхема, реализующая вычислительное устройство.

> ПЛИС



Программируемая микросхема с аппаратным эмулятором железа. Эмулирует железхо на уровне железа путем универсальных соединяемых ячеек. Применяется там, где идет разработка других микросхем или там где программы на микропроцессоре работают слишком медленно и нужна аппаратная реализация.

, IOT

Баззворд, internet of things. Суть в том что если запихнуть в каждый утюг и вибратор вайфай или другую радиопередающую хуету которая будет соединять с интернетом то наступить всеобщее счастье.

, СБИС

сверхбольшая интегральная схема. Английский аналог - VLSI. В принципе любой чип который ты можешь найти на материнской плате - СБИС.

, короче вот это вот все. Понять как их программируют.

Судя по твоим вопросма - тебе в АСУ тред в /wrk/

И понять как программировать управление устройствами по MODBUS.

Тебе точно в /wrk/
336 1337774
Помню был сайт, где обучение ассемблеру сделано в виде игры. Еще вроде создатели игры запилили курс на Coursera. Помогите найти.
337 1337801
>>37774
Сайта не подскажу, зато рекомендую поигорять в Human Resource Machine
338 1338241
>>37801

>Human Resource Machine


Это чё хоть такое то?
upgrd.jpeg146 Кб, 780x573
339 1338878
Есть какая-то строка на ассемблере, которая "ломает комп"? Как деление на 0 в Си, например
sage 340 1338989
>>38878

> ломает комп


Что?

> Как деление на 0 в Си, например


ud2
341 1339013
Здравствуйте, пилюкаю на плюсах, потихоньку ковыраю asm, возник вопрос, вот есть функция, которая возвращает какую-то структурку
как пример:

struct S1{
float x;
float y;
};

extern "C" S1 getval()

Вопрос, а как эта структура возвращается программе?
если б било бы какое-то простое значение, то для x86 оно либо через EAX, либо чрез ST(0) будет получено. На стеке хз как передать, ибо по окончанию процедуры он будет восстановлен.
Как оно вообще все работает?

Вот накидал на godbolt:

https://godbolt.org/z/VosXLv

dвыглядит будто от уехавшей вершины стека отсчитывает и оттуда значение берет, или я что-то не правильно понял.
sage 342 1339018
>>39013

> Как оно вообще все работает?


Если оно влезает в EDX:EAX, то возвращается в них (именно это у тебя и происходит, а остальное - преобразования каждого члена из набора 32 бит в float). Вот такое:
S1 getval(void) { return (S1) { 1.0, 2.0 }; }
int main(void) { S1 res = getval(); }

превращается примерно в такое:

<EDX:EAX> getval(void) {
temp = (S1) { 1.0, 2.0 };
<EAX> = ∗(uint32_t ∗) &temp.x;
<EDX> = ∗(uint32_t ∗) &temp.y;
}

int main(void) {
S1 res;
<EDX:EAX> = getval();
uint32_t temp1 = <EAX>, temp2 = <EDX>;
res.x = ∗(float ∗) &temp1;
res.y = ∗(float ∗) &temp2;
}

Иначе, если оно в EDX:EAX не влезет (например, добавь float z в S1) вызывающая функция неявно первым параметром кладет в стек указатель на структуру, куда вызываемая функция должна записать результат. Вызываемая функция пишет результат и возвращает этот же указатель в eax. Т.е., вот это:
S1 getval(void) { return (S1) { 1.0, 2.0, 3.0 }; }
int main(void) { S1 res = getval(); }

практически равнозначно вот такому:

S1 ∗getval(S1 ∗res) { ∗res = (S1) { 1.0, 2.0, 3.0 }; return res; }
int main(void) { S1 res, temp; memcpy(res, getval(&temp), sizeof(temp); }

И еще там есть различные ограничения, когда вроде бы в EDX:EAX результат влезает, но возвращают его все равно вторым способом.
sage 342 1339018
>>39013

> Как оно вообще все работает?


Если оно влезает в EDX:EAX, то возвращается в них (именно это у тебя и происходит, а остальное - преобразования каждого члена из набора 32 бит в float). Вот такое:
S1 getval(void) { return (S1) { 1.0, 2.0 }; }
int main(void) { S1 res = getval(); }

превращается примерно в такое:

<EDX:EAX> getval(void) {
temp = (S1) { 1.0, 2.0 };
<EAX> = ∗(uint32_t ∗) &temp.x;
<EDX> = ∗(uint32_t ∗) &temp.y;
}

int main(void) {
S1 res;
<EDX:EAX> = getval();
uint32_t temp1 = <EAX>, temp2 = <EDX>;
res.x = ∗(float ∗) &temp1;
res.y = ∗(float ∗) &temp2;
}

Иначе, если оно в EDX:EAX не влезет (например, добавь float z в S1) вызывающая функция неявно первым параметром кладет в стек указатель на структуру, куда вызываемая функция должна записать результат. Вызываемая функция пишет результат и возвращает этот же указатель в eax. Т.е., вот это:
S1 getval(void) { return (S1) { 1.0, 2.0, 3.0 }; }
int main(void) { S1 res = getval(); }

практически равнозначно вот такому:

S1 ∗getval(S1 ∗res) { ∗res = (S1) { 1.0, 2.0, 3.0 }; return res; }
int main(void) { S1 res, temp; memcpy(res, getval(&temp), sizeof(temp); }

И еще там есть различные ограничения, когда вроде бы в EDX:EAX результат влезает, но возвращают его все равно вторым способом.
343 1339020
>>39018
но я не вижу EAX:EDX в asm листинге, что мне выдает godbolt.org

sub esp, 8
call F1 getval(void) ; getval
mov DWORD PTR $T1[esp+12], edx

и дальше там уже для принта.
sage 344 1339021
>>39020
Пятая и девятая строки по твоей ссылке. Но да, оно одновременно делает для printf даблы из флоатов. Т.е., положили регистр в стек, взяли movss в SSE-регистр, сконвертировали cvtps2pd в дабл и положили movsd в стек дабл.
345 1339022
>>39018
я просто читал немного про call-convention, и не до конца нашел инфу, как именно написать совместимую с с++ кодом асм функцию и возвращать такие жирные объекты. Оно понятно, что для жирного объекта надо работать с указателем. >>39021

вот добавил z, и получил:

sub esp, 24 ; 00000018H
lea eax, DWORD PTR $T1[esp+24]
push eax
call _getval

т.е отъели от стека памяти под структуру, скормили через lea адрес, в который будет записывать функция, так?
т.е функция на самом деле будет уже иметь один входной параметр, который будет у нее ожидать компилятор?

З.Ы. благодарствую за ответы.
sage 346 1339027
>>39022

> т.е функция на самом деле будет уже иметь один входной параметр, который будет у нее ожидать компилятор?


Да, неявный параметр, который всегда на стеке (даже если __fastcall) и всегда первый: если бы было S1 getval(int foo, int bar), фактически компилятор генерил был код для S1∗ getval(S1 ∗result, int foo, int bar).

> т.е отъели от стека памяти под структуру


Да. Причем заметь, что оно даже с оптимизациями делает отдельную временную переменную для возвращаемого значения, и потом уже копирует туда, куда ты присваиваешь результат функции, при этом читает оно не из временной структуры, адрес которой компилятору вроде бы известен заранее, а именно по возвращенному в EAX указателю (псевдокод выше кидал).

Зачем нужно копирование, я не знаю, но так было еще в VC++98. Хотя если пофантазировать, при таком подходе у функции есть возможность послать нахуй эту временную структуру (и аргумент с указателем на нее) и возвращать, например, адрес какой-то глобальной константной структуры.
347 1339029
>>39027
спасибо тебе, добрый человек.
348 1339273
>>38241
Игорь, обучающая ассемблеру https://gog.com/game/human_resource_machine
>>39018

> <EDX:EAX>


Это какой-то синтаксис, или ты для удобства так сделал? Выглядит забавно
>>39034 (Del)
Пошёл нахуй
349 1339291
Возможно ли на IDA к хуям выдрать авторизацию программы, чтобы она сразу запускалась без всяких анальных верификаций?
350 1339297
>>39291
Да, возможно
351 1339298
>>39297
Вот прям точно-точно?
352 1339366
>>39298
Можно и без IDA сделать.
353 1339370
Как посмотреть при дебаггере в IDA какая инструкция выполняется прямо сейчас, по нажатию мыши например.
Я нажимаю например добавить поле, ввожу название для него и тд. Должно же состояние меняться по идее, а в дебаггере такого не происходит. Я думаю надо плагин установить.
354 1339374
>>39370

>какая инструкция выполняется прямо сейчас


Которая в кернеле контекст переключает.
355 1339399
>>39366
Это мне уж точно не под силы.
sage 356 1339510
>>39273

> для удобства так сделал?


Да. У IDA/HexRays для регистров в прототипах используется нечто похожее, а двоеточие - это обычный способ указывать пару регистров (в том числе, и в манаулах интела).

>>39370
По нажатию мыши выполняется миллион инструкций, и хорошо еще, если один. Тебе стоит прочитать что-нибудь про оконные сообщения в винде.
357 1339637
>>39370
Начни с изучения своей операционной системы.
358 1341127
сложнее ли асм в изучении более высокоуровневых языков программирования?
359 1341144
>>41127
Сам по себе асм гораздо проще. Но если писать что-то сложное или быстрое, всплывает куча нюансов, требующих глубокого понимания работы процессора и памяти, как минимум.
360 1342567
https://www.youtube.com/watch?v=rX7lIfQlqOo
Реверсачеры, смотрите какие у нас няшные коллеги существуют!
Хотели бы себе такого сеньора в команду?
sage 361 1342687
>>42567
У вас жён нет?
sage 362 1342812
>>42687
Наши жены фронтендеры ряжены
363 1343634
>>42812
Я сам фронтендер...
364 1343635
>>42812
Наши жёны в двадэ изображЁны
Вот где наши жёны!
15382467304370.jpg63 Кб, 506x666
365 1343640
>>43635
Привет!
download20190206163038.png115 Кб, 600x600
366 1343672
367 1344305
Реверсачеры, можете пояснить за гипервизоры простым языком? Нагуглил только сложную инфу на ангельском, не могу пока осилить технически. С меня как всегда.
368 1344362
>>44305

>простым языком


Нахуй не нужны.
369 1344383
370 1344782
>>44362
Нужны. Ведь это самый верх безопасности, эмуляторы должны выстрелить! Скриньте
sage 371 1344820
>>44362
На каждой первой VPS.
372 1344914
Реверсач, либо я тупой либо я не знаю что.
Есть 25 значений по адресу adress + offset, каждое из них занимает по 1 байту. Мне нужно выдернуть 11 значение из этого списка и изменить его. Делаю так:
uint8_t* adress + offset |= 1 << 0xb;

И это не работает. Где ошибка?
373 1344933
>>44782

>эмуляторы


Какие еще эмуляторы. Гипервизоры это другое. И у них другое назначение.
374 1345013
>>44914
Ну посмотри какое значение указателя у тебя получается. Ты не 11й берёшь, а 2^11й. Не выпендривайся и напиши адрес + офсет + 11
image.png23 Кб, 349x306
375 1345016
>>45013
Вот пикрил. Как мне записать в какую-то одну ячейку если они все по одному адресу?
376 1345039
>>45016
В приведённом коде ты меняешь указатель, а не значение.
Int value = (address+offset+11)
value |= 1<<n
(Address+offset+11) = value
Так делай
377 1345041
>>45039
Макака съела звёздочки
В первой и третьей строке перед скобкой звёздочка
378 1345049
>>45016
Да это же флаги, тебе с битами работать надо.
379 1346146
Реверсач, какие есть тулзы/гитхабы для дампа из режима ядра? Нужно сдампить один процесс, но он накрыт йоба-протекторами и его драйвер защищает.
.png53 Кб, 656x755
380 1346819
Сука, никак не могу взломать эту ебанную парашу, и отвязать авторизацию при входе
381 1347242
>>46819
Жаловаться пришел?

Кидай сюда, поможем
382 1347539
Сап реверсач. Есть ли отладчики с возможностью писать комментарии к строкам кода, дампу памяти и прочему? Чтобы можно было просто щелкнуть на определенный фрагмент стека и в поле рядом написать "здесь хранится пароль", просто ситуация когда в одну функцию вложили функций 7, то постоянная сверка этих ebp+78, ebp+160 выносит мой мозг.
383 1347616
>>47539
Ты не поверишь, но даже OllyDbg даже без плагинов это умеет.
sage 384 1347735
>>47539
IDA позволяет нормально обозвать локальные переменные, смотреть содержимое наведением мыши, в том числе для указателей и т. д., но зато ее отладчик неудобен в остальных моментах.

>>47616

> OllyDbg даже без плагинов это умеет


Там можно только к коду комментарии писать. Или ты обладатель тайного знания о том, как переименовать LOCAL.1 во что-то более внятное или знаешь как заставить OllyDbg распознать локальную переменную, когда он сам не осилил? Без плагинов.
385 1347751
>>47735
Я к этому

>Есть ли отладчики с возможностью писать комментарии к строкам кода, дампу памяти и прочему?

386 1347776
>>47539
IDA Pro же. Не отладчик, но умеет вызывать другие, как я понимаю.
387 1347779
>>06485
СИ
И
388 1347827
>>47539
В иде так можно. Можно подключить дебагер, во время выполнения прокоментить и даже сохранить все это. Гугли мануалы.
389 1347829
>>46146
Бамп, анончики! Нужно сдампить. Драйвер не дает это сделать, следовательно надо дампить тоже из ядра... Допустим напишу драйвер, как мне его загрузить-то? Патчгвард не даст же.
390 1347830
>>47829
А ты уверен, что он позволит тебе сдампить?
Мне кажется нет.
391 1347834
>>47830
Так из ядра он не может предотвратить дамп. Все что мне нужно это получить структуру процесса. Даже если он там что-то похукает, что уже сомнительно, я могу свой callback раньше зарегистрировать.
392 1347835
>>47834
Могу посоветовать несколько тупо тупых вариантов.
1. Поставить WinXP в виртуалку и не париться на счет подписи драйверов.
2. Сделать BSoD при запущенном файле с фулл-дампом и смотреть в windbg
3. Найти таки generic unpacker под свой протектор.
4. Ознакомиться с https://vxlab.info/wasm/article.php-article=dumping.htm и подобными статьями, чтобы понять, что все не так однозначно, т.к. драйвер может с системой стартовать, раньше чем ты хукать соберешься.
5. Тупо сидеть и трасисровать в windbg syser жив? чем вообще сейчас в ринг0 дебажат?
6. Ну и как вариант - попытаться заинжектить свою длл
393 1347862
>>47835
О, благодарю, статья очень годная. Почти все способы не подойдут.
Там процесс Denuvo накрыт + драйвер как говорил уже ранее.
Все таки без танцев с бубнами ничего не выйдет. Буду пробовать тогда писать драйвер дампить через mmcopyvirtualmemory и грузится в тестовом режиме с тестовой подписью, мб пройдет такое.
394 1350851
>>47862
Нашел свежий проджект на гитхабе. Драйвер + обертка на сисярпе. Может пригодится кому.https://github.com/EquiFox/KsDumper
395 1351189
Кто знает пароль для инсталляции ida pro 7.2?
396 1351753
Аноны, как в windbg просмотреть весь лист вызовов? Например я вызываю функцию CreateProcess в юзермоде и хочу просмотреть всю иерархию вызовов и в ядре тоже.
397 1352219
>>50851
Эх, а апекс из гифки на торрентах до сих пор нормальной нет.
398 1352656
>>01036 (OP)
Как изменить вектор в таблице прерываний?
mov 0000:[0180h], ax почему-то не работает (TASM, если чё).
399 1352689
>>52656

>mov 0000:[0180h], ax


mov ds/es (а то даже и ss), 0
mov ds:[0180h], ax
400 1352691
>>52689
Ну и word ptr, если нужен.
401 1352699
>>52689
>>52691

>mov es, 0


>Illegal use of segment register

402 1352704
>>52699
Ну епт, xor ax, ax/mov es,ax
403 1352705
>>52704
Спасибо.
image.png3 Кб, 325x67
404 1352848
>>01036 (OP)
Кто-нибудь знает, как в ARMовском ассемблере поместить программу по произвольному адресу в памяти? По умолчанию программа располагается начиная с адреса 0х00000008, а надо, что бы она располагалась, например, по адресу 0х20002000. Я пробывал использовать DCD 0x20002000, но это меняет только регистр-указатель, при этом программа остаётся по старому адресу. Хорошо работает команда SPACE 0x400, но если адрес слишком большой, то компиляция занимает ооооочень много времени. Подскажите, может быть сталкивались с этим?
405 1352858
>>52848
Обычно это делается опцией линкера
406 1352992
>>52219
Там дамп почти в 1гб выходит + денуво сверху, никто не будет ковыряться в этом скорее всего.
image.png12 Кб, 626x193
407 1353014
>>52858
Я редактировал эти параметры, но это ничего не меняет.
408 1353045
>>53014
Почему у тебя x/o пустой и r/o нулевой, хотя ты явно хочешь переместить именно код? Алсо, попробуй org задать в ассемблере, хуй знает. Это Keil?
409 1353056
>>53045

>Это Keil?


Ага.

>Алсо, попробуй org задать в ассемблере


Unknown opcode ORG , expecting opcode or Macro. Судя по всему, его даже в системе команд нет.

>Почему у тебя x/o пустой и r/o нулевой


Это дефолтные значения, я менял и то, и то, потом менял только x/o, потом менял только r/o, но всё равно в отладчике команды как были по адресу 0x00000008 так и остались.
410 1353190
>>53056

> Unknown opcode ORG , expecting opcode or Macro


Печально. Как же вы там живете с этим? Это ж ебнуться можно все по секциям раскладывать.

У тебя на пике есть use memory layout from target dialog. Пробовал? Ну или смотри скрипт линкера, хуй знает.
411 1353196
>>53190
Вертани дерево?
412 1353317
>>53190

>У тебя на пике есть use memory layout from target dialog. Пробовал?


ОФК пробывал. И остальные галочки тоже. Ничего не помогает.
413 1353593
>>52992
Блин, видимо мне не поиграть в эту бесплатную игру.
414 1354658
Допустим есть маленькая утилита (единственный exe файл на 14 мб), которая конектится раком через хуй к дискорду/инторнету и проверяет, совпадает ли ключ. С чего начать, если я совсем нуфажик, но могу в кодинг. На ней наверняка висят какие-то защиты, как вообще к ней поступиться?
415 1354727
>>54658

>маленькая утилита


>на 14 мб

416 1354744
>>54727
На фоне браузеров размером под гигабайт - вполне себе маленькая, лол.
417 1354854
>>54727
Я предполагаю, что в нем упаковано несколько файлов. Ну так с чего начать?
418 1354992
А кроссплатформенный ASM бывает?
419 1355013
>>54992
LLVM IR, ну и всевозможный байткод виртуальных машин (JVM, CIL).
420 1355039
>>55013
А чего тогда Джава не работает со скоростью плюсов хотя бы?
421 1355107
>>54658
14 мб это дохуя, уверен она под протектором. Нихуя ты не сделаешь без знаний, забей. Можешь трафик понюхать, обычно это самое слабое место васянских утилит.
422 1355108
>>55039
Потому что это не асм, а асмоподобная интерпреиируемая прослойка
423 1355180
>>55039
Работает.
424 1355199
>>54658
Лучше взломай установочный пароль для IDA Pro 7.2

Вот тут китайцы что-то накидали
https://bbs.pediy.com/thread-248989.htm

прикол в том, что установщик уже есть, остался пароль только
425 1355712
>>55199
Не, ну я знал что китайца малость ебанутые, но чтоб надеяться в installshield пароль в отладчике увидеть...
им бы аниме рисовать
426 1356037
427 1356067
>>55712
Он увидел там шифр
>>56037
Крякнутый 7.0 у всех есть
428 1356083
>>56037
Товарищ майор.. Как поживаете?
429 1356325
Тру системники тут? Есть фуллскрин приложение Opengl/directx. Возможно ли как-то поверх него разместить свое окно или просто делать отрисовку? Работаю в ядре.
430 1356345
>>56325
Конечно, всякие фрапсы так и делают.
431 1356365
>>56325
Хуки пиши да рисуй поверх.
432 1356434
>>56345
Всякие фрапсы для взаимодействия внедряются в процесс. Меня это не устраивает.

>>56365
Подробнее. Чего хукать то?
kiberpank3214031324.jpg84 Кб, 800x450
434 1356933
Мир, братья. Чуваки, а где взять доп материал по Нарваху(ну, там программы, вот это всё)
CyberColorsbyNightShade1919.jpg243 Кб, 900x1248
435 1356988
>>56933
А всё, братья, нашёл, спасибо. Может добавите в шапку?
http://ricardonarvaja.info/WEB/INTRODUCCION AL CRACKING CON OLLYDBG DESDE CERO/EN FORMATO DOC/
436 1356989
>>56434
За отрисовку отвечают WDDM драйвера, все туда сходится
У драйвера есть регистрируемые функции
437 1357190
>>56768
Это не работает без внедрения в процесс.

>>56989
Я могу просто через апи сказать рисуй мне вот тут йобу? Если так, то интересно. Если нет то придется перехватывать буфер.
438 1358584
Реверсач, почему у экзешника упакованного Темидой только 1 импорт? lstrcpy. Я знаю, что можно вызывать динамически винапи через GetProcAddress + GetModuleHandle, но тут только lstrcpy. Как это работает, может объяснить кто-нибудь?
439 1358589
Поясните за кернел драйвера. Я так понимаю, что они нужны чтобы читать и модифицировать память какого-то процесса. Но зачем нужен инжект, если драйвер сам по себе обязан иметь все права? Я короч запутался, помогите...
sage 440 1358605
>>58584

> Я знаю, что можно вызывать динамически винапи


TEB->PEB->PEB_LDR_DATA->InLoadOrderModuleList->kernel32.dll, ну и дальше можно парсить экспорты.
441 1358984
Начал я тут обмазываться 8051 и у меня встал вопрос по поводу передачи данных через UART. Вот смотрите, предположим есть у нас 8051 с частотой 12МГц и делителем 12 подключенный через последовательный кабель к компу. Комп настроен на передачу данных со скоростью 9600 бод. Судя по расчетам вот тут: http://www.keil.com/c51/baudrate.asp самая близкая скорость, которую мы можем получить на микроконтроллере это 10 417 бод, что не соответствует нашим стандартным 9600, хотя во всех инструкциях к 8051 пишут, что для 9600 нужно ставить именно эту скорость. Так вот, как это работает, если скорость передачи и приема не совпадают?
442 1359000
>>58605
Осторожна, тут хакир!
443 1359001
Пацаны у вас тут че хакирский тред??? Научите плиз хакирить
444 1359018
>>59001
Тащемта тут ничего сложно нет. Просто берешь и без задней мысли ксоришь дворды в уме.
445 1359026
>>58605
Ааааа, вот это уже похоже на правду, но все равно не совсем понял, хоть и писал недавно PE парсер.
Получаю PEB своего процесса А как его получить без вызова апи то?, смотрю в список загруженных модулей, там нахожу нужный, применяю парсер, нахожу адреса функций А что дальше? Как их вызывать-то? Или напрямую можно, так как модуль внутренний?.
446 1359031
>>59001
Значение знаешь?
447 1359034
>>59031
Неа, не знаю.
448 1359065
>>59026

> А как его получить без вызова апи то?


[fs:0x18]+0x30 в 32-битном коде и [gs:0x30]+0x60 в 64-битном.

> А что дальше? Как их вызывать-то?


Ну как можно вызывать фукнцию, если у тебя адрес есть? Просто вызываешь и все.
449 1359076
>>59065

>[fs:0x18]+0x30 в 32-битном коде и [gs:0x30]+0x60 в 64-битном.


Спасибо, погуглю. Не знал что так можно.

>Ну как можно вызывать фукнцию, если у тебя адрес есть? Просто вызываешь и все.


Да, тупанул. Парсер писал для удаленных модулей, а не для внутренних, там по-другому немного было.

Получается, что до всей внутренней информации я могу добраться вручную? Без вызовов апи, правильно?

А вот vmprotect в новых версиях используют системные вызовы, чтобы апи похукать нельзя было, но системные вызовы имеют разные коды на разных системах, не хардкодили же они все это дело? Тоже распарсить выходит можно или дизасемблер нужен?
450 1359086
>>59076

> не хардкодили же они все это дело


Хардкодили. Поэтому там по-хорошему должен быть фолбек, если оно не знает текущую винду.

> до всей внутренней информации я могу добраться вручную


Ну если оно лежит в юзермоде, и ты не боишься, что твой софт сломается в следующем билде десяточки из-за распидорашенных структур, то можно, да.
image.png7 Кб, 410x262
451 1359108
>>59086
Хотя если софт обновляется, то можно и похардкодить...
Да я про юзермод. Вроде обещали что не будут больше структуры херить.

Еще о системных вызовах. В ядре же я могу похукать функции все равно, правильно? А отследить, что функция была вызвана из юзермода можно?
452 1359655
Да бомбит блять! Почему windbg такой кривой?
dt nt!_eprocess <address> все показывает, хочу вытянуть из eprocess peb, пишу dt nt!_eprocess peb <address> И НИХУЯ! dt nt!_peb
<address> тоже нихуя. Зато когда рекурсией прохожусь dt nt!_eprocess <address> -r, то все показывает. Как правильно то делать? Делаю как в книжке написано windows internals и выводится только название структуры, но не ее поля.
453 1359725
>>59655

>Почему windbg такой кривой?


Проблемы индейцев.
454 1359754
>>59725
А чем ядро дебажить-то?
455 1360336

> 14/02/19


>Кидай сюда, поможем


Обхохочешься, когда узнаешь, что я хочу сделать.
1551722885533.gif2 Мб, 154x273
456 1360337
>>60336
>>47242
блять сука нахуй
457 1360338
>>60336
Ширус?
458 1360339
>>60338
Нет. Хочу отвязать авторизацию от чита, чтобы он работал без авторизации, авторизация мой главный враг, и я должен его уничтожить
460 1360461
>>60384

> MUCH better than other tools


Радар наконец умрет в мучениях?
461 1360522
>>60384

>www.nsa.gov


>download


Посоны... тут это... анальные зонды пихают.
462 1360523
>>60384
Так себе, да еще и на джабе. Идачка без плагинов и то лучше.
463 1360699
>>60384
>>60461
>>60522
>>60523
У меня одного их сайт не открывается?
403
А на гитхабе ничего нет.
464 1360709
>>60699
У тебя просто страна неправильная. Смени на правильную, и все будет.
465 1360973
Кто умеет по фасту виндовые dll ревёрсить?
http://rgho.st/66crCxNyS
Будучи запущенной через rundll32 в фоне есть n-1 ядер и перестает есть когда открывается диспетчер задач. (для аналогичных прог остановка не прописана). Рядом лежали dll-ки для SSL, отсылал в сеть менее килобайта данных, по крайней мере на момент когда спалил.
В ресурсах рандомные джипеги и описания из видосов на ютубе (и ссылки). Выглядит как рандом чтобы наебнуть чексуммы.
Брат умрёт?
466 1361161
Реверсачеры. Что-то я запутался, помогайте. Есть хеллоуворлд, в нем функция складывающая два числа, как мне удаленно вызвать эту функцию с нужными параметрами и получить результат?
467 1361184
>>61161
В смысле удаленно? Уточни.
468 1361200
Я тут недавно в глупую историю попал из за пароля, поставленного на hdd в биосе. Никто не знает, как там шифрование работает? Или может дадите ссылку почитать где это хорошо расписано именно с программными деталями?
469 1361229
>>60973
Там какой-то пиздец, если честно. Нихуя не понятно +xmm
>>61200
Тебе лучше в сторону mhdd копать. Есть варианты со стандартным паролем, а есть и без.
sage 470 1361248
>>61200

> Никто не знает, как там шифрование работает?


Гугли ATA security.

>>60973
Оно тебе надо, очередной CPU-майнер реверсить? Удоли, да и хуй с ним.
471 1361635
>>61184
Вызвать функцию с параметрами в чужом процессе и получить результат.
sage 472 1361646
>>61635
Read/WriteProcessMemory, CreateRemoteThread, оберточка, которая дергает функцию.
473 1361791
>>61646
А без CreateRemoteThread можно обойтись?
474 1361838
Вкатываюсь в изучение FASM. В тех гайдах, по которым я учусь- написано, что скомпилированная программа должна запускаться под Шindows. Но она сука не запускается. Выдаёт мне эту ошибку. Он вроде как компилирует в DOS-овский формат .com
Но судя по тому что написано в гайде- он должен прекрасно запускаться

http://asmworld.ru/uchebnyj-kurs/001-neobxodimye-instrumenty/

> Все программы учебного курса вы сможете запустить под Windows. Конечно, реально они будут работать в эмуляторе DOS, в режиме виртуального процессора 8086. Но для учебных целей это вполне подойдёт.



Что я делаю не так?
475 1361887
>>61838
После WinXP в составе винды нет NTvdm, только в dosbox запустится, либо под чистым досом.
Такие дела.
476 1361976
Пытался вкатиться, но в итоге никакие хеллоуворлды не работали, а перкидывать байты из одной ячейки памяти в другую надоело.
477 1361994
>>61887

>После WinXP в составе винды нет NTvdm


Пиздишь. Его нет в 64 битных сборках, как хрюши, так и дейсяточки. В 32 битных всё на месте.
sage 478 1362092
>>61838
В дополнение к тому, что тебе уже написали, ты делаешь не так

> use32

479 1362267
>>61646
Погуглил, на сколько я понял мне нужно либо хукать функцию либо инжектить шеллкод, если я хочу обойтись без CreateRemoteThread ?
480 1362272
>>62267
Тебе в любом случае инжектить код, который либо что-то делает сразу, либо грузит длл, которая что-то делает. Можно, например, SetThreadContext сделать, можно традиционный SetWindowsHookEx, зависит все от того, что ты делаешь и зачем.
asm.png21 Кб, 535x524
481 1362334
Сап, читаю Калашникова
Остановился на этой программе, не могу понять почему отладчики творят какую-то херню, хотя в обычном DOS выполнении строка выводится
Почему отладчик сразу прыгает на адрес смещения Lab_1?
Стикер63 Кб, 241x209
482 1362338
>>62334
Да это же противоотладка через конвеер.
483 1362350
>>62334

> не могу понять почему отладчики творят какую-то херню


Я хуй знаю, что именно имел в виду Калашников 9090h там явно не зря, но по-моему, он промахнулся. Независимо от того, как именно работает конкретный отладчик если это, конечно, не "внешний" отладчик какого-нибудь эмулятора, вроде отладчика DOSBox или Bochs: втыкает ли он int3 в первый байт строки (6), или взводит TF, или у него аппаратные точки останова я, кстати не помню, они в 16-битном режиме есть?, но что бы он ни делал, при попытке пошагового выполнения это должно вызвать исключение, чтобы отладчик получил управление. После выполнения первой же инструкции sp у тебя указывает на lab1, стек растет в обратную сторону, поэтому при передаче управления обработчику исключения (прерывания) процессор положит в стек cs:ip и flags, т.е., 6 байт минимум, и тем самым потрет инструкции из строк (6)-(7)-(8), плюс обработчик тоже что-нибудь свое в стек положит, эти данные потрут строку (5) и, возможно, еще немного PSP. Если отладчик втыкал int3, то он восстановит кусок инструкции в (6), или не восстановит, похуй - все равно при возврате из обработчика прерывания вместо кода будут байты адресов, т.е., мусор.
То же самое произойдет в том редком случае, когда после выполнения одной из первых трех инструкций тикнет таймер, или произойдет еще какое-нибудь аппаратное прерывание, поэтому это не антиотладка, а говно генератор псевдослучайных багов.
sage 484 1362352
>>62334
>>62350
Лол, а поведение без отладичка-то я и не описал. В общем, в 90h - это инструкция NOP, в строке 7 две эти инструкции кладутся в стек (т.е., SP=SP-2, word[SP] = 9090h), затирая тем самым инструкцию в строке (8), поэтому если каких-то внешних прерываний не будет, то вместо int 20h выполнится два nop, и потом управление уйдет в строку (10).
485 1363296
Подскажите, как в асме работать с COM-интерфесами?
sage 486 1363509
>>63296
Так же, как и не в асме. Что тебя интересует?
struct ISomethingVtbl
Method1 dd ?
Method2 dd ?
...
MethodN dd ?
ends

struct ISomething
vt dd ? ; указатель на ISomethingVtbl
ends
...
mov eax,указатель на ISomething ; например, от CoCreateInstance
push push push аргументы
push eax ; this
mov ecx,[eax+ISomething.vt] ; указатель на ISomethingVtbl
call [ecx+ISomethingVtbl.MethodN]
test eax,eax
js failed
image.png14 Кб, 637x175
487 1364936
Читал я о том, что в винде в х86 процессах через FS:[0] а в x64 d GS:[0] я попадаю прямиком на TEB текущего треда. Но вот беда, в дебаггере например х64dbg все значения сегментов всего 2 байта, у которых старшие 16 бит обычно 0, а младшие 16 одинаковые у некоторых сегментых регистров. Как же так, думаю я, пацаны же говорили нормально можно через сегментные регистры шарить, и тут мне говорят, что сейчас сегментные регистры вообще то селекторы в GDT/LDT в зависимости от третьего бита справа, а остальное - оффсет в количестве записей или в байтах? в (G/L)DT. И дальше я завис. А как мне пошарить то в этой LDT? К примеру, вот хочу я в дебаггере посмотреть чё там в TEB, смотрю на FS/GS вижу там 002B 101011 → GDT, 3 ring , и нихуя себе? Это я на ТЕВ данного процесса должен выйти через глобальную таблицу? Как мне из 002В попасть на ТЕВ? И почему несколько сегментных регистров имеют это значение? Я знаю, что они смысла не имеют как в 16 битных процессах, но всё же.
sage 488 1365067
>>64936

> А как мне пошарить то в этой LDT?


GetThreadSelectorEntry() даст тебе базу сегмента по его селектору (не работает в 64-битной винде). Алсо, в самом TEB лежит нормальный, линейный адрес TEB, поэтому в ольке можно в окне дампа перейти (Ctrl+G) по [fs:0x18] и [gs:0x30] и смотреть, а в x64dbg это будет fs:[0x18] и gs:[0x30] для 32- и 64-битного кода соответственно.

> почему несколько сегментных регистров имеют это значение


Потому что в x86-64 "сломали" сегментные регистры, и база из дескриптора больше не учитывается, но для fs/gs базой можно манипулировать через MSR (из ядра).
489 1365211
Чем профилировать asm? У кого-нибудь был удачный опыт использования Valgrind в Win64? Поделитесь плз.
490 1365542
Аноны, нужно вычислить к какому драйверу обращается приложение по хэндлу. Хукаю DeviceIoControl, получаю нужный хэндл. Что дальше с этим хэндлом можно сделать чтобы узнать как можно больше инфы о драйвере?
image.png38 Кб, 1021x302
491 1365560
>>65542
В процесс-хакере нашел object address. Это что? Ссылка на KEPROCESS структуру?
sage 492 1365602
>>65211

> Чем профилировать asm


vtune amplifier уровнем ниже, wpt/xperf уровнем выше.
493 1365694
>>65542
Нашел кажись, анонасы. Вот может пригодится кому: NtQueryInformationFile msdn
494 1367012
http://asmworld.ru/uchebnyj-kurs/010-slozhenie-i-vychitanie-s-perenosom/
В этой статье написано про "слово"

> Запись word означает, что мы переопределяем размер переменной (она объявлена как DWORD) и обращаемся к младшему слову.


Собственно чё это значит?
495 1367017
>>67012
Да.
496 1367020
>>67012
Что не понятно? Что такое слово? Или разложение более крупной единицы на младшую/старшую часть?
497 1367027
>>67020
И то и то не понятно
498 1367080
>>67027
В начале было слово.
И слово было 2 байта.
499 1367081
>>67027
Машинное слово - платформозависимая хрень, равна разрядности регистров процессора (покури хотя бы вики). В твоей статье используется 16 разрядный режим (см комментарии к коду), word - 16 бит/2 байта. Двойное слово - 32 байта.
Стикер512x512
500 1367083
>>67081

>Двойное слово - 32 байта

501 1367084
>>67083
Очепятался жи
502 1367168
Есть свежая годная литература по ядру, написанию драйверов, минифильтров и вот этого всего? Винда офк.
503 1367219
>>58605
Надеюсь ты еще здесь. Пытаюсь тоже самое провернуть в ядре. Знаю что можно динамически получать адрес RtlInitUnicodeString + MmGetSystemRoutineAddress. Можно улучшить как-нибудь?
506 1367363
>>67341
>>67344
Проиграл. Но мне тащемта чисто в исследовательских целях нужна эта информация, тарищ майор. Спортивный интерес так сказать. А потом в швитые шышыа понаеду к маломягким работать за котлету вечнозеленых.
Ну и у юзверей давно нет доступа к ядру, какие там руткиты.
507 1367560
>>18205
Бля, какой же ты олдфаг, братишка.
asm.jpg558 Кб, 1052x2076
508 1367602
Антоны, подскажите диалект
509 1367645
>>67602
На TMS320C6000 похоже.
510 1367693
>>67602
PCMCAS500, кажется.
511 1367848
Как представить 5 байтов в ассемблере как 10 тетрад, аноны?
Как их хранить? Мне нужно сделать между ними хоr и я черт его знает как их разделить пополам.
512 1367852
>>67848
xor / 2
513 1367854
Test
514 1367855
Bump
515 1367861
>>67852
Мне нужно байт разделить на две тетрады.
То бишь 10101010 нужно поделить на 1010 и 1010 и между ними сделать хоr, если я правильно задание понял.
(Дан массив из 5 байтов. Рассматривая его как массив из 10 тетрад, найти «исключающее или» всех 10 тетрад.)
Не к спеху на самом деле, сдача только через неделю, но задание странное. Я нипонил.
516 1367865
10101010 and 00001111 = 00001010
10101010 and 11110000 = 10100000
...
PROFIT
517 1367868
>>67865
после этого:
00001010 нормально
10100000 shr 4 = 00001010
и A xor B
518 1367877
>>67868
Можно еще поксорить сначала все числа как есть, байтами: a0 ^ a1 ... ^ a4, а потом уже поксорить куски результата, как сделал ты.

ОП, АЛЛО? ГДЕ ПЕРЕКАТ? ТЫ ЖИВ ТАМ ВООБЩЕ?
519 1368396
>>67868
>>67865
Я тут поклацал, поклацал в турбоассемблере(такие дела, у нас изучают это).
И выводит вроде не то.
Help, please :3
Может я не то делаю, и нужно с байтами по другому.
https://ideone.com/bdBqe3
520 1368399
Должно выводить 26, а выводит 146.
521 1368436
>>68396

>https://ideone.com/bdBqe3


24 строка. У тебя BX уехал в ебеня.
А в 25 вообще обнуляешь.
А в 28 берешь [BX+1]
Хуйня какая-то.
522 1368444
>>68399
4 xor 7 xor 11 xor 6 (23=00010111, 0001 xor 0111=0110=6)xor 5 = 11
523 1368623
Аноны, есть у кого windows internals 6 edition part 2 на русском?
524 1369177
>>67877

>ОП, АЛЛО? ГДЕ ПЕРЕКАТ? ТЫ ЖИВ ТАМ ВООБЩЕ?


Подожди сейчас сделаю. Если бы не ёбанная рекапча, давно бы сделал.
Тред утонул или удален.
Это копия, сохраненная 24 апреля 2019 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски