s54820
но линкер msvc вроде так не умеет
Это не линкер не умеет, это инлайн-асм не умеет. Пример на масме: ; foo.asm .586 .model flat .code _xxx equ 123h - 400000h externdef _xxx:abs ; Понятия не имею, как правильно. end ; bar.c int main(void) { void xxx(void); xxx(); } собираем и получаем искомое (и оно даже работает, пока релоков нет): C:\> ml /c foo.asm C:\> cl bar.c foo.obj C:\> dumpbin /disasm bar.exe | grep -m1 123 00401003: E8 1B F1 BF FF call 00000123
Eugene
@jinxonik вон человек решение предложил
Выглядит интересно. Но заморочено, конечно: модуль отдельно писать для этого. Но если очень надо, то вариант. Надо попробовать :)
s54820
Выглядит интересно. Но заморочено, конечно: модуль отдельно писать для этого. Но если очень надо, то вариант. Надо попробовать :)
Если очень надо, то можно просто по far-указателю сходить call far то есть, всё равно 32-битная винда уже полумертва, и значения сегментных регистров менять никто не будет (call через __asm _emit).
Eugene
а на винде разве селекторы всегда одни и теже?
Хм... Вообще, я думал, что да, но оказалось, что на x86 и x64 винде они различаются (для 32-битных прог): 0x1B и 0x23 соответственно (а под Wine x86 вообще 0x73) 🤔 https://github.com/corkami/docs/blob/master/InitialValues.md Так что, вариант с call far так себе получается.
Erik
Доброй ночи всем, кто онлайн. Люди дорогие, нужна небольшая помощь. Есть ли в чате человек, кто шарит за ядро линукса и за его устройство? Если да, то хотелось бы с этим человеком пообщаться, т.к. есть некоторые мысли, которые хотелось бы обсудить, если есть время и возможность. Вопрос очень обширный и требущий понимания архитектуры ядра, и боюсь в данном чате может быть оффтопиком. Заранее спасибо за отклик!
Vadim Yegorov
Vadim Yegorov
Vadim Yegorov
Vadim Yegorov
Столкнулся с таким протоколом у приложения, на сокетах
Vadim Yegorov
Протокол имеет свой тип сообщения / заголовок (размер тела сообщения / магический код / отношения пакета к другим пакетам / является_ли пакет фрагментом)
Vadim Yegorov
Кто сталкивался с реверсом такого
Eugene
Всем салют! Пишу на Visual C++. Есть необходимость зафиксировать определённые адреса виртуальной памяти под собственные нужды. В частности, некоторую область, по адресу 0x01000000, по адресу 0x02000000 и т.д. (делаю это через VirtualAlloc). Однако данные адреса уже заняты. Можно ли что-то сделать, чтобы эти адреса оставались свободными?
Eugene
Может, есть какие-то особые ключи компиляции, сборки?
Eugene
Есть ощущение что dll-ки MSVCRT при загрузке это всё устраивают. По идее, можно в цепочку DLL-ок врубить свою, которая будет резервировать память по нужным адресам. Но тогда она должна загружаться первой. Это как можно организовать?
Andrei
Откуда эта вырезка есть про другие инструкции такое а лучше про всем ?
Vadim Yegorov
Aiwan зачем ты меня в чс кинул
Vadim Yegorov
Даже не спросил ничего, сразу после слова привет
Vadim Yegorov
Я что так плохо выгляжу?
Aiwan \ (•◡•) / _bot
Даже не спросил ничего, сразу после слова привет
так мож поэтому? не помню, давно было
Vadim Yegorov
а вообще я тебе написал потому что думал что ты меня помнишь
Vadim Yegorov
общались пару лет назад до этого
Aiwan \ (•◡•) / _bot
#book help fasm rus
Vadim Yegorov
необычное поведение
Aiwan \ (•◡•) / _bot
общались пару лет назад до этого
каждый 3й мне об этом говорит. если вопрос по асму, надо было в асмочате спросить. в личках я всех незнакомых в чс
Vadim Yegorov
пару лет назад в лс общались очень хорошо
Vadim Yegorov
ну ок, спор какой-то как с девушкой, то есть бесполезный
Todd
как можно после изменения переменной заново задать ей значение, которое было в начале исполнения программы в NASM?
Aiwan \ (•◡•) / _bot
через стек, регистр или другую переменную
Eugene
Всем салют! Кто-нибудь знает, использует ли когда-нибудь Visual C++ инструкции legacy FPU при стандартной настройке /arch (её дефолтное значение = SSE2) ? В частности, в 32-битном режиме компиляции (х86) при оптимизации /О2 :) Или всегда используется SSE при работе с floating point?
Константин
Привет всем, пишу сейчас загрузчик и ядро на yasm и необходимо выбрать цвет шрифта (1 из 6 предложенных), могу ли я каким то образом сохранить значение в загрузчике и при передаче управления в ядре уже получить это значение?
­
Выдели область для хранения параметров и сохраняй-читай параметры оттуда.
­
К примеру, 0x0 - 0x1e3 — загрузчик, 0x200 - 0xdead — ядро. И у тебя есть свободный сегмент 0x1e4 - 0x1ff куда ты можешь сохранять цвет и размер шрифта... целых 27 байт!
­
А, стоп. При передаче управления! Просто определи участок озу, сохраняй туда параметры, а ядром оттуда читай. Я почему-то подумал, что тебе надо между перезагрузками хранить параметры...
Константин
Понял, спасибо
Eugene
Народ, в 32-битных Win8+ (в т.ч. 10) PAE всегда включён? Т.е. 3+ Гб всегда доступно проге (при правильной компиляции)? А в 7 и ниже нужно специально включать в конфиге загрузки, чтобы задействовать более 2 Гб. Я правильно понял? И сколько по факту доступно в Vista, 7, 8, 8.1, 10 (c PAE)?
Eugene
А зачем тебе столько?
Больше 2х гигов? Может пригодиться :)
disba1ancer
Больше 2х гигов? Может пригодиться :)
Только если ты пишешь очередной 1с
Eugene
Только если ты пишешь очередной 1с
Странно. Разве только 1С потребляет много памяти? 😳
disba1ancer
Странно. Разве только 1С потребляет много памяти? 😳
Это последний пример который требовал переключать на 3 гига
disba1ancer
Просто в остальных случаях была уже 64ёх битная винда
Eugene
Просто в остальных случаях была уже 64ёх битная винда
А, если с этой точки зрения, то понятно :)
The Bird of Hermes
Как перекрасить вывод в консоль в тасме под досбоксом?
Aiwan \ (•◡•) / _bot
Как перекрасить вывод в консоль в тасме под досбоксом?
выводить текст в видео память, задав нужные цвета для фона и символов. или шуршать в справке и смотреть необходимые прерывания
Eugene
Ребят, а SDIV и UDIV на каких ARM-процессорах поддерживается? В спецификации про ARMv7-A написано "OPTIONAL" и ещё вот так: This 32-bit A32 and T32 instruction is available in Armv7‑A if Virtualization Extensions are implemented, and optional if not Cortex A72 / A53, например, имеют на борту UDIV/SDIV в режиме работы ARMv7 ? Ну и ARMv8 заодно.
The Bird of Hermes
Есть такая прцедура:
The Bird of Hermes
movie proc far pusha mov dx, head_yx mov sleep_inc, 0 lea si, key mov bx, [si] xor bh, bh mov ah, 02h int 10h mov al,'*' int 29h lea si, key push ax xor ah, ah add dh, [si+1] mov al, dh add al, line div line mov dh, ah xor ah, ah add dl, [si] mov al, dl add al, column div column mov dl, ah mov ah, 02h int 10h mov al, head_sumb mov color, 10 call vga_prnt mov head_yx, dx popa ret movie endp
The Bird of Hermes
и ошибка в команде lea?
Нет, ошибка в том, что она не возвращается
The Bird of Hermes
Процедура выполняется, а ret мне всё ломает
Eugene
Aiwan \ (•◡•) / _bot
Процедура выполняется, а ret мне всё ломает
что значит ВСЕ? у тя комп виснет?
The Bird of Hermes
значит ее нет
Ну я пошагово отработал, процедура работает, именно на ret происходит какая-то хрень.
Aiwan \ (•◡•) / _bot
Ну я пошагово отработал, процедура работает, именно на ret происходит какая-то хрень.
если хрень, то это не ошибка, а твой код выполняется строго так как ты написал. и евгений написал где может быть твое упущение
The Bird of Hermes
The Bird of Hermes
Спасибо
Ivan
push ax ret хорошая идея тоже самое что и call (push & ret = jump on ax)
01011010
Всем привет, подскажите как раскодировать тридцать бит кода: 000000000011101101111011100000 я его по по таблице ASCII прогнал бред получился что ещё можно попробывать?
01011010
может он вообще не кодирован
там должен быть номер, но повторюсь что по таблицам ASCII и Base64 получается что то не то. Есть ещё спецификация в которой говорится про поля и размер в байтах как этим можно воспользоваться согласно ей на номер отведено 64 байт нейросеть почему то определила что 30 байт это номер вот понять не могу как его разобрать?
Eugene
Всем привет, подскажите как раскодировать тридцать бит кода: 000000000011101101111011100000 я его по по таблице ASCII прогнал бред получился что ещё можно попробывать?
Что значит раскодировать? Раскодировать во что? Если это шифрованный код, надо знать алгоритм шифрования (и ключ, если он нужен). Если нужно получить просто число из 30 бит - это другое. И т.д.
Дамир
Если 1 байт - это 8 бит примерно допустим будет 10011001. То тебе так и надо продолжать. В более мелкие единицы ты умножаешь, в более крупные делишь
Дамир
Но вообще вопрос, что вы подразумеваете под словом раскодировать.
Eugene
Я ведь правильно понимаю что этот код можно назвать полем?
Просто число - 974560 (в dec, если слева старший бит, справа - младший). Каким полем? Есть поле записи или класса. Алгебраическое поле. Поле Галуа. Магнитное поле. Поле для посева. Поле чудес с Якубовичем.
M
Получить число из 30 бит
Если это должно быть число, то зачем тогда ты по таблице ASCII прогонял? Или это должна быть строка? Если да, то из скольки элементов она должна состоять? От этого и пляши. Если, например, строка должна быть длиной 5 символов, то, значит, из этих 30 бит на каждый элемент приходится по 6 бит. Недостающие либо нулями, либо единицами добивай. Мало входных данных
Eugene
Я так говорю согласно спецификации на этот код N п/п Название поля Количество знаков Размер в битах десятичных символьных
Тогда можно. Если разделить какую-то структуру на элементы (поля́), то одно из поле́й может содержать 30 бит.
01011010
Я просто сначала прогнал через gp чат она мне ответила что 30 бит соответствуют номеру но по спецификации 64