Публикации по теме 'assembly'
Статья о разнице между пространствами имен и сборкой
Что такое пространства имен
Пространство имен — это группа семантически связанных типов, содержащихся в сборке или, возможно, распределенных по нескольким связанным сборкам. Например, пространство имен System.IO содержит типы, связанные с файловым вводом-выводом, пространство имен System.Data определяет базовые типы баз данных и так далее. Важно отметить, что одна сборка может содержать любое количество пространств имен, каждое из которых может содержать любое количество типов.
Что..
Сборка Haiku x86: привязка шеллкода оболочки
После написания программы «Hello, World» на ассемблере, а затем некоторого простого шелл-кода, который выполняет /bin/bash , мой следующий проект — создать шелл-код для связывания.
Мой план атаки следующий:
Создайте оболочку привязки в C Создайте оболочку привязки в сборке Преобразование оболочки привязки сборки в шеллкод Протестируйте шелл-код
Создайте оболочку привязки C
Первым шагом в создании нашего шелл-кода является создание оболочки привязки на C. Сделав это, мы можем..
Полезные регистры в сборке
Как человеку, который время от времени выполняет обратное проектирование двоичных файлов, будь то в целях анализа или для CTF, может быть трудно вспомнить назначение многих регистров, особенно учитывая, что большинство инструментов дизассемблирования не дают понять, какие регистры что делают.
Вот краткое изложение того, что делают некоторые из наиболее распространенных регистров и для чего используются определенные блоки кода:
32-битные регистры
EIP
Вы, вероятно, не увидите EIP..
Сборка здесь, сборка там
global start
section .text
start:
mov rsi, msg
mov rdx, msg.len
mov rax, 0x2000004 ; write
mov rdi, 1 ; stdout
syscall
mov rax, 0x2000001 ; exit
mov rdi, 0
syscall
section .data
msg: db “Hello, World!”, 10
.len: equ $ — msg
Или просто:
print(‘Hello, world!’)
Бьюсь об заклад, последний выглядит намного проще.
Но несмотря на то, что первый код (предупреждение о спойлере - код ассемблера) уже не часто используется и в нем пишет лишь горстка людей, он по-прежнему актуален..
Что происходит, когда вы вводите gcc main.c
GNU?
представляет собой операционную систему и обширный набор компьютерного программного обеспечения. GNU полностью состоит из свободного программного обеспечения , большая часть которого распространяется под собственной Стандартной общественной лицензией Проекта GNU ( GPL ).
Язык программирования C?
является универсальным , процедурным компьютерным языком программирования , поддерживающим структурированное программирование , область действия лексической переменной и..
Отладка случайного поведения программы
Я смотрел на странный coredump на днях. Из ядра программа пыталась записать в виртуальный адрес 0x6 и вылетала на memcpy .
Там кусок кода выглядит так
if (a == 1) { do_foo(); } else { do_bar(); }
И из дампа ядра a действительно 1 . Однако выполнение взяло ветвь else и разбилось на memcpy в do_bar .
Дизассемблировал код в gdb с помощью disassemble /s . Это намного лучше, чем просто disassemble или даже disassemble /m . С оптимизацией времени компоновки..
Вопросы по теме 'assembly'
`testl` eax против eax?
Я пытаюсь понять некоторую сборку.
Сборка следующая, меня интересует строка testl :
000319df 8b4508 movl 0x08(%ebp), %eax
000319e2 8b4004 movl 0x04(%eax), %eax
000319e5 85c0 testl %eax, %eax
000319e7 7407...
83568 просмотров
schedule
25.02.2024
Расположение памяти MASM32
Я пытаюсь читать из основной памяти, используя сборку masm32, и для этого я создал (как ранее рекомендовалось в ответе на другой мой вопрос здесь) массив, который будет содержать сильно разделенные области памяти (чтобы избежать чтения из кеш). Мне...
2513 просмотров
schedule
23.09.2022
Как перевести байт push NASM в синтаксис GAS?
Я «портирую» исходный код NASM на GAS и обнаружил следующие строки кода:
push byte 0
push byte 37
GAS не допускает "push byte" или "pushb".
Как мне перевести приведенный выше код в синтаксис GAS?
Спасибо
4547 просмотров
schedule
14.08.2022
x86 перейти к адресу
В качестве назначения для класса безопасности я пытаюсь использовать __asm__("jmp 0xbffff994"); в своем коде, но когда я разбираю вещи в gdb, инструкция меняется на jmp 0xc8047e2a . Любая идея, почему и как я могу перейти к определенному адресу?
19518 просмотров
schedule
14.01.2024
Программа MIPS для определения прохождения / непрохождения тестов
Я пишу программу MiPS, которая проверяет список из 15 результатов тестов. И это будет ввод с терминала. Критерий прохождения - 50 баллов. Выводы на терминал будут включать баллы в каждой категории и количество сдавших и не сдавших экзамен студентов....
2257 просмотров
schedule
02.08.2022
Ограничения синтаксиса сборки Intel по сравнению с AT&T
Для меня синтаксис Intel намного легче читать. Если я буду бродить по лесу сборок, сосредоточившись только на синтаксисе Intel, я что-нибудь упущу? Есть ли какая-то причина, по которой я хотел бы перейти на AT&T (кроме возможности читать сборки...
39516 просмотров
schedule
02.12.2023
Добавление ведущих символов подчеркивания к символам сборки с помощью GCC на Win32?
У меня есть фрагмент кода C, который вызывает функцию, определенную в ассемблере. В качестве примера предположим, что foo.c содержит:
int bar(int x); /* returns 2x */
int main(int argc, char *argv[]) { return bar(7); }
И bar.s содержит...
22284 просмотров
schedule
26.07.2022
как работают вызовы процедур на ассемблере?
Я только начал возиться с ASM, и я не уверен, правильно ли я понимаю вызовы процедур.
скажем, в какой-то момент в коде есть вызов процедуры
call dword ptr[123]
и процедура состоит всего из одной команды, ret:
ret 0004
каков будет...
16688 просмотров
schedule
05.04.2024
Как я могу загрузить значения из памяти, не загрязняя кеш?
Я хочу прочитать ячейку памяти, не загрязняя кеш. Я работаю на машине X86 Linux. Я попытался использовать инструкцию ассемблера MOVNTDQA:
asm("movntdqa %[source], %[dest] \n\t"
: [dest] "=x" (my_var) : [source] "m" (my_mem[0]) :...
1798 просмотров
schedule
11.11.2022
Какая 32-битная/64-битная архитектура ЦП имеет самый простой набор инструкций?
Я чувствую себя очень комфортно, работая с 32-битным ассемблером PowerPC, но совершенно теряюсь, когда пытаюсь разобраться в коде x86. Имеются ли какие-либо другие распространенные архитектуры, такие как ARM, MIPS, Sparc и т. д., более простой, чем...
3981 просмотров
schedule
31.01.2024
Вопрос по сборке сопроцессора Intel x86
У меня возникли проблемы с пониманием того, как получить результат вычисления, выполненного с использованием сопроцессора Intel x86.
Пожалуйста, обратите внимание на следующий сегмент данных.
.data
res real4 ?
x real4 5.0
k real4 3.4
и...
757 просмотров
schedule
26.10.2022
Как писать в консоль в fasm?
Я исключительно новичок в сборке. Я только вчера взял его в руки и просмотрел много примеров и до сих пор не могу понять для себя, как писать в консоль. Я всегда получаю сообщение об ошибке, когда мне кажется, что я копирую его по-своему.
9521 просмотров
schedule
04.07.2022
Как сдвинуть двоичное число, заполнив MSB 1?
Есть ли в MIPS способ сдвинуть двоичное число (0000), заполнив его старший бит 1 (1000 и в следующий раз 1100 и в следующий раз 1110 и т. д.) каждый раз?
633 просмотров
schedule
23.10.2022
Компилятор: перевод в сборку
Я написал интерпретатор для своего экспериментального языка и знаю, что хочу продолжить и написать для него небольшой компилятор. Вероятно, он возьмет исходный код, выполнит те же действия, что и интерпретатор (токенизатор, парсер), а затем переведет...
454 просмотров
schedule
18.10.2022
Как язык ассемблера взаимодействует с чем-то вроде Интернета?
Итак, на днях я думал о языках, и меня поразило, что любая программа, написанная на скомпилированном языке, который взаимодействует с Интернетом, затем транслируется в сборку, которая должна взаимодействовать с Интернетом. Я только начал немного...
5667 просмотров
schedule
03.03.2024
Оптимизация количества команд сравнения (PDP-11)
Для PDP-11, как я могу изменить следующий фрагмент сборки так, чтобы это были только две инструкции, но они работали так же, как эти четыре?
tst r0
blt label
cmp r0, #75
bgt label
510 просмотров
schedule
22.04.2024
Что находится в стеке 68000, когда классическая MacOS входит в программу?
Я пытаюсь понять точку входа в старое классическое приложение Mac. Я дизассемблировал первый ресурс CODE (не CODE#0, который является таблицей переходов). Код ссылается на некоторые переменные вне стека: слово по адресу 0004(A7), массив длинных...
597 просмотров
schedule
15.11.2022
программа asm не работает (nasm)
org 0x100
SEGMENT .CODE
mov ah,0x9
mov dx, Msg1
int 0x21
;string input
mov ah,0xA
mov dx,buff
int 0x21
mov ax,0
mov al,[buff+1]; length
;string UPPERCASE
mov cl, al
mov si, buff
cld
loop1:...
716 просмотров
schedule
06.11.2023
Сборка ARM - Инструкция по ответвлению
Присматриваю какую-то сборку для запуска какой-нибудь прошивки, работающей на ARM-процессоре. Определена следующая таблица векторов исключений:
LDR pc, =resetHandler
LDR pc, Undefined_Addr
LDR pc, SWI_Addr
LDR pc,...
3013 просмотров
schedule
27.06.2022
неверное значение счетчика программы: 0
Я сейчас работаю с ассемблером под процессором MIPS. В настоящее время я использую симулятор MARS, и по неизвестным причинам после каждого запуска я получаю следующее сообщение об ошибке:
Перейти: бегаем try.s
Ошибка в: недопустимое...
26087 просмотров
schedule
23.04.2024