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
disba1ancer
disba1ancer
Eugene
disba1ancer
Eugene
а на винде разве селекторы всегда одни и теже?
Хм... Вообще, я думал, что да, но оказалось, что на x86 и x64 винде они различаются (для 32-битных прог): 0x1B и 0x23 соответственно (а под Wine x86 вообще 0x73) 🤔
https://github.com/corkami/docs/blob/master/InitialValues.md
Так что, вариант с call far так себе получается.
disba1ancer
Erik
Доброй ночи всем, кто онлайн. Люди дорогие, нужна небольшая помощь. Есть ли в чате человек, кто шарит за ядро линукса и за его устройство? Если да, то хотелось бы с этим человеком пообщаться, т.к. есть некоторые мысли, которые хотелось бы обсудить, если есть время и возможность. Вопрос очень обширный и требущий понимания архитектуры ядра, и боюсь в данном чате может быть оффтопиком. Заранее спасибо за отклик!
Vadim Yegorov
Vadim Yegorov
Vadim Yegorov
Vadim Yegorov
Столкнулся с таким протоколом у приложения, на сокетах
Vadim Yegorov
Протокол имеет свой тип сообщения / заголовок (размер тела сообщения / магический код / отношения пакета к другим пакетам / является_ли пакет фрагментом)
Vadim Yegorov
Кто сталкивался с реверсом такого
Eugene
Всем салют!
Пишу на Visual C++. Есть необходимость зафиксировать определённые адреса виртуальной памяти под собственные нужды. В частности, некоторую область, по адресу 0x01000000, по адресу 0x02000000 и т.д. (делаю это через VirtualAlloc). Однако данные адреса уже заняты. Можно ли что-то сделать, чтобы эти адреса оставались свободными?
Eugene
Может, есть какие-то особые ключи компиляции, сборки?
Eugene
Есть ощущение что dll-ки MSVCRT при загрузке это всё устраивают.
По идее, можно в цепочку DLL-ок врубить свою, которая будет резервировать память по нужным адресам. Но тогда она должна загружаться первой. Это как можно организовать?
Anonymous
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
disba1ancer
disba1ancer
disba1ancer
Просто в остальных случаях была уже 64ёх битная винда
Eugene
The Bird of Hermes
Как перекрасить вывод в консоль в тасме под досбоксом?
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
Aiwan \ (•◡•) / _bot
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
и ошибка в команде lea?
The Bird of Hermes
Процедура выполняется, а ret мне всё ломает
Aiwan \ (•◡•) / _bot
Eugene
Aiwan \ (•◡•) / _bot
The Bird of Hermes
значит ее нет
Ну я пошагово отработал, процедура работает, именно на 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 байт это номер вот понять не могу как его разобрать?
01011010
01011010
Дамир
Если 1 байт - это 8 бит примерно допустим будет 10011001. То тебе так и надо продолжать. В более мелкие единицы ты умножаешь, в более крупные делишь
Дамир
Но вообще вопрос, что вы подразумеваете под словом раскодировать.
M
Получить число из 30 бит
Если это должно быть число, то зачем тогда ты по таблице ASCII прогонял? Или это должна быть строка? Если да, то из скольки элементов она должна состоять? От этого и пляши. Если, например, строка должна быть длиной 5 символов, то, значит, из этих 30 бит на каждый элемент приходится по 6 бит. Недостающие либо нулями, либо единицами добивай.
Мало входных данных
01011010
Eugene
01011010
01011010
Я просто сначала прогнал через gp чат она мне ответила что 30 бит соответствуют номеру но по спецификации 64