Anonymous
По сути одно и то же.
Однако такой вопрос. Они подойдут мне, если я до этого не кодил на ассемблере?
egor
Anonymous
Да
Тогда будет по крайней мере реально.
Aiwan \ (•◡•) / _bot
Nikita
Я на 32 уже несколько лет писал. Мы пишем на ассемблере вспомогательный софт. Основной на С++. Поскольку начали писать на C++ для 64, то ассемблер нужен теперь 64.
Nikita
Евгений, огромное спасибо!
Sergey Boogerwooger
Тут недавно была дискуссия, рекомендовать ли студентам изучать асм, типа говорят "нахуа он сейчас". Вообще, если, кто не знал, то в блокчейнах дохрена низкоуровневой логики, и смарт-контракты - это куда ближе к асму, чем к высокоуровневым языкам (я про нормальные блокчейны, а не скамину где "у нас контракты на жабаскрипте"). И нормально писать и аудировать не понимая, как работает стек, как делать очень оптимизированные алгоритмы, чего стоит каждая инструкция виртуальной машины можно, но до топа не добраться. Так что учите асм нормально, даже если это микроконтролллер в универе - реально пригодится, да в высоконагруженных системах эти знания ппц нелишние
Marsel
Пацаны почему флешка форматнутая в exfat текстовые файлы с инфой превращает в null? (если на неё скинуть текстовый файл с инфой а потом открыть в блокноте из флешки) это флешка говно или с форматом что то не так ? Винд10 флешка Micro sd
Sergey Boogerwooger
Sergey Boogerwooger
При чём тут ассемблер?
Если сделать системный вызов open(на запись), потом не сделать write, а потом close, получится пустой файл.
Sergey Boogerwooger
А при чем амсемблер - я хз
Aiwan \ (•◡•) / _bot
так ты файл прграмно создаешь или через проводник копируешь на флешку?
Anonymous
Vovo4ka
С Новым 0b10000000100010 годом!!!
Eugene
Хай ол! 👋
ЧЯДНТ?
NASM:
bits 64
global tst
section .bss
dat resq 100
section .text
tst:
mov rax,[dat]
ret
CPP:
extern "C" void tst();
int main()
{
tst();
}
BAT:
nasm.exe -f win64 a.asm -o a.o
g++ -s -m64 a.cpp a.o -o a.exe
Результат:
a.o:a.asm:(.text+0x4): relocation truncated to fit: IMAGE_REL_AMD64_ADDR32 against `.bss'
collect2.exe: error: ld returned 1 exit status
Eugene
Решил вопрос :)
mov rax,[qword dat]
работает нормально :))
Но ощущение, что можно как-то красивее сделать, через ключи NASM, например.
Eugene
А вот на
mov rax,[qword dat + rdx]
уже NASM ругается:
a.asm:9: error: invalid effective address
🤦🏻♂️🤦🏻♂️🤦🏻♂️
Значит, надо как-то линкеру объяснить как с этим работать...
George
Несколько вариантов:
Eugene
Пока сработало вот так:
-Wl,--image-base=0x10000000
George
1. Убрать динамическую базу
George
2. Использовать относительную адресацию
George
Второй вариант универсальнее
George
Через rip
Eugene
Меня интересуют опции, каким образом это сделать.
-fPIC не помогает, напрмиер.
George
Навскидку:
lea rsi, [rel dat]
George
George
Т.е. одной опции зачастую недостаточно
George
Тогда явным образом используй rip
George
Можно попробовать глобально задать:
DEFAULT REL
George
Eugene
George
George
Типа глобального конфига
George
Eugene
Eugene
Вообще говоря, 64-битная абсолютная адресация не работает в случае с регистрами.
George
Ошибка, которая у тебя была явно связана с релоками
George
И решение с заданием жёсткой базы образа избавляет от ошибки
Eugene
Ну вот я и решил вопрос через -Wl,--image-base=0x10000000
George
Ну или как у тебя, через rax:
lea rax, [rel dat+rdx]
George
Можешь тут проверить:
section .data
msg db "Skip Hello world!", 0ah
SKIP_CHARS equ 5
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rdx, SKIP_CHARS
;lea rsi, [rel msg] ; String as is
lea rsi, [rel msg+rdx] ; String with skipped chars
mov rdx, 13
syscall
mov rax, 60
mov rdi, 0
syscall
George
Eugene
Eugene
По крайней мере, при тех же ключах компиляции.
Eugene
/usr/bin/ld: b.o: relocation R_X86_64_32S against `.data' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
Ключ -fPIE никак не помогает.
Eugene
Не знаю, как они там компилят такой код, с какими ключами...
Eugene
Я делаю так (через WSL):
wsl gcc -s -nostdlib -fpie b.o
George
Eugene
Я в реале не могу этот код скомпилить. А ты можешь?
Без ключа -Wl,--image-base=0x10000000
Eugene
Eugene
В браузере я могу и такой код скомпилить: https://www.mycompiler.io/view/8PvfldV
Eugene
Как они его компилят? С какими ключами?
George
George
George
Можно попробовать в другом онлайн инструменте
George
Я с телефона, поэтому чистый nasm протестировать пока не могу
Eugene
Мне с релоками не понятен момент.
Eugene