• XSS.stack #1 – первый литературный журнал от юзеров форума

Learn C language and assembly

khalid

HDD-drive
Пользователь
Регистрация
08.08.2021
Сообщения
46
Реакции
5
1. don't use C/C++ 😉
2. If you really really need to, I always found it beneficial to learn a bit of assembly (esp. memory operations / memory model as seen from a usermode application), and look at
A question for those with experience: What are some sources for learning these matters, especially assembly? What projects are suitable for immersion and what is the difference between assembly language
 
Пожалуйста, обратите внимание, что пользователь заблокирован
most malwares are coded in c/c++ why you want skip them ? assembly can be a very powerfull language if added to c/c++ but alone does not worth
 
Пожалуйста, обратите внимание, что пользователь заблокирован
так ты тред назвал "изучайте C и асм", в первом пункте утверждаешь, что не надо учить C и C++.
Изучать асм по мануалу интела, но это оверкилл. Часто достаточно знать базовые инструкции, за что отвечают регистры и соглашение о вызовах. Всё это гуглится очень быстро.

1. don't use C/C++ 😉
Бред полный.
Ассемблер хороший язык, который делает ровно то, что ты написал. Но имеется ли у тебя столько времени, чтобы писать свои проекты на ассемблере? Думаю, что нет.
Очень мало мест, где нужно писать исключительно код на асме. (да и то там его не прям много получается). Поэтому асм в юзер моде нужен только в связке с каким-то языком. И всё-таки стандарт это C и C++. (не про десктоп разработку, а про приложения, где потенциально может понадобиться использование асма).

What projects are suitable for immersion
всякое дерьмо типа буткитов и мб в каких-то микроконтроллерах, где нет возможности использовать C. Если говорить прям про погружение, а не чёто поревёрсить и пару инструкций написать.
what is the difference between assembly language
Ассемблеров дохуя и больше (архитектуры + разные синтаксисы). Тебе разницу между каким и каким?)))

Вообще я так скажу: C был изобретён, чтобы не возиться с ассемблером. В первую очередь, чтобы писать кроссплатформенный код. Каждая строчка из исходника на C прозрачно переводится в ассемблер. То есть в какой-то степени можно сказать, что C == asm. (это относится и к C++, но с ним чуток сложнее).
Не нужно использовать асм для полноценных проектов, если того не требует ситуация. Только в фановых целях.
Бери сразу C, а лучше C++.
 
так ты тред назвал "изучайте C и асм", в первом пункте утверждаешь, что не надо учить C и C++.
Изучать асм по мануалу интела, но это оверкилл. Часто достаточно знать базовые инструкции, за что отвечают регистры и соглашение о вызовах. Всё это гуглится очень быстро.


Бред полный.
Ассемблер хороший язык, который делает ровно то, что ты написал. Но имеется ли у тебя столько времени, чтобы писать свои проекты на ассемблере? Думаю, что нет.
Очень мало мест, где нужно писать исключительно код на асме. (да и то там его не прям много получается). Поэтому асм в юзер моде нужен только в связке с каким-то языком. И всё-таки стандарт это C и C++. (не про десктоп разработку, а про приложения, где потенциально может понадобиться использование асма).


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

Ассемблеров дохуя и больше (архитектуры + разные синтаксисы). Тебе разницу между каким и каким?)))

Вообще я так скажу: C был изобретён, чтобы не возиться с ассемблером. В первую очередь, чтобы писать кроссплатформенный код. Каждая строчка из исходника на C прозрачно переводится в ассемблер. То есть в какой-то степени можно сказать, что C == asm. (это относится и к C++, но с ним чуток сложнее).
Не нужно использовать асм для полноценных проектов, если того не требует ситуация. Только в фановых целях.
Бери сразу C, а лучше C++.
I didn't really mean that, it's advice from someone, and I'm looking for some sources and advice to learn assembly and the language.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Каждая строчка из исходника на C прозрачно переводится в ассемблер
Чисто формально - это не так. Если бы это было так, то не было бы undefined behaviour и unspecified behavior.

По сабжу: тех, кто намерено хочет потратить на разработку проекта в N-раз больше времени и в итоге получить в M-раз менее стабильный код, всегда сложно от этого отговорить. Сейчас мало того, что нет смысла писать на чистом ассемблере, так еще и мало смысла стало писать на Си или аналогичном языке с минимумом абстракций и отсутствием должных проверок корректности.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Чисто формально - это не так. Если бы это было так, то не было бы undefined behaviour и unspecified behavior.
А можешь привести пример такого уб, которое нельзя на асм перевести? Не учитывая оптимизации компиляторов.
тех, кто намерено хочет потратить на разработку проекта в N-раз больше времени и в итоге получить в M-раз менее стабильный код, всегда сложно от этого отговорить.
это мания. Мания писать без CRT... На самом деле есть причины, которые могут объяснить почему спускаются на лвл ниже.
Меня вот корёжит от исключений, поэтому не очень люблю писать на C#, хотя язык очень крутой. И также не люблю либы на C++, в которых есть исключения.
Мне просто очень давно вбили в голову, что исключения это плохо и всё тут. Хотя по факту они замедляют программу только в том случае, если они возникают. Но бывает и так что они возникают по какой-то херне полной, которую можно было бы проверить, вызвав метод/функцию.
Просто это часто новички не делают и их насильно исключениями заставляют проверять всё ли пошло по плану. Но в итоге это приводит к ситуациям, типа такой, что запрос не отправился, потому что прокси дохлая и тебе кидают исключение. Хотя херовой тучей способов тебе можно сообщить об этом, не приходя к исключениям.
Плюс есть конструкторы классов, в которых принято инициализировать какие-то объекты внутри класса. А если не получилось их инициализировать, то что? Тоже придётся кидать исключение, потому что это единственный правильный выход в такой ситуации.
Так и получается, что C и функциональное программирование хоть и выглядят тяжко для поддержки и прочее, но они не делают мозги по каждому поводу.
Стиллак на powershell выиграл конкурс. Делайте выводы :)
Ну тред всё-таки не о малвари, и даже не о повершелле. Тут человек больше спрашивает про ассемблер
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А можешь привести пример такого уб, которое нельзя на асм перевести? Не учитывая оптимизации компиляторов.
Ну давай, например, пример по теме sequence points:
C:
#include <stdio.h>

int func1() {
    printf("1");
    return 1;
}

int func2() {
    printf("2");
    return 2;
}

int main(int argc, char** argv) {
    printf(" %d %d\n", func1(), func2());
    return 0;
}
Собираем двумя разными компиляторами без оптимизации:
Код:
gcc -o test_gcc test.c
clang -o test_clang test.c
./test_gcc
./test_clang
Вывод:
Код:
21 1 2
12 1 2
То есть, gcc сгенерировал код, который сначала вызывает вторую функцию, а потом первую, а clang - наоборот.

Мне просто очень давно вбили в голову, что исключения это плохо и всё тут
Ну, вообще говоря, с этим я согласен. В плюсах исключения вносят кучу неочевидных возможностей выстрелить себе в ногу (как, например, рекурсивное исключение в деструкторе безусловно прибивает процесс), в шарпах чуть меньше, но когда вместе начинают работать потоки/асинки и исключения - есть порядочно подводных камней (типа завершение потока из другого - это исключение в первом потоке, или если в блоке finally выскакивает исключение, ты не всегда можешь его отловить даже через глобальные обработчики исключений).

Так и получается, что C и функциональное программирование хоть и выглядят тяжко для поддержки и прочее, но они не делают мозги по каждому поводу.
Ну тебе никто не мешает в плюсах отключить исключение и стандартные библиотеки. Но зато получить, например, RAII, с которым становится куда проще контролировать время жизни выделенной на куче памяти и разнообразных хендлов. Defer то в Си до сих пор не завезли вроде.
 
Ну давай, например, пример по теме sequence points:
C:
#include <stdio.h>

int func1() {
    printf("1");
    return 1;
}

int func2() {
    printf("2");
    return 2;
}

int main(int argc, char** argv) {
    printf(" %d %d\n", func1(), func2());
    return 0;
}
Собираем двумя разными компиляторами без оптимизации:
Код:
gcc -o test_gcc test.c
clang -o test_clang test.c
./test_gcc
./test_clang
Вывод:
Код:
21 1 2
12 1 2
То есть, gcc сгенерировал код, который сначала вызывает вторую функцию, а потом первую, а clang - наоборот.


Ну, вообще говоря, с этим я согласен. В плюсах исключения вносят кучу неочевидных возможностей выстрелить себе в ногу (как, например, рекурсивное исключение в деструкторе безусловно прибивает процесс), в шарпах чуть меньше, но когда вместе начинают работать потоки/асинки и исключения - есть порядочно подводных камней (типа завершение потока из другого - это исключение в первом потоке, или если в блоке finally выскакивает исключение, ты не всегда можешь его отловить даже через глобальные обработчики исключений).


Ну тебе никто не мешает в плюсах отключить исключение и стандартные библиотеки. Но зато получить, например, RAII, с которым становится куда проще контролировать время жизни выделенной на куче памяти и разнообразных хендлов. Defer то в Си до сих пор не завезли вроде.
живи вечно пожалуйста
 
What are some sources for learning these matters, especially assembly?
A good choice! Nowadays, assemblers have macros, using which programming is no different from C++. To recommend literature, you need to know your level of knowledge in this area. Here is a list of what you will need to learn from the very basics:

1. AMD Developer's Guide (Vol. 1-5). Unlike Intel manuals, AMD documentation contains nothing superfluous, and only what is actually needed is collected.

2. WinDbg kernel level debugger (specific to your OS). Needed to study the internal organization of the system (structure, etc.). It can be downloaded separately, or as part of the SDK package (option 2 is better).

3. User-level debugger x64Dbg (universal, suitable for x32 code).

4. IDA-Pro/Free disassembler, for static analysis of executable files of most known formats. As an alternative, you can use others (for example GHIDRA, Radare, and others), but they require the installation of an additional environment, such as Python and .Net-Framework. For 32-bit code, a good disassembler was "Hacker's-Disasm" from Artyom Egorov, but it does not support x64.

5. From the literature on Ring(0) classics:
• Russinovich. Windows Internal Suite v7.0;
• Richter. Programming applications for Microsoft Windows;
• Yosifovich. Windows kernel programming;
• Harry Nebbett. Native API Reference;

6. There is little literature on Ring(3) specifically for assembler - as a rule, these are articles from "Iczelion" (see ref 1). But to program in UserMode, it’s enough to learn the basics of the Win32-API, so the book is suitable for any language, because the format for calling API functions is the same for all. If necessary, i can show you my list, although it is in Russian.

PS\\ Sorry for my English - this is a translator
 
То есть, gcc сгенерировал код, который сначала вызывает вторую функцию, а потом первую, а clang - наоборот.
steamuserimages-a.akamaihd.net.jpeg
 
assembly can be a very powerfull language if added to c/c++ but alone does not worth
I do not know what you mean with "powerful", assembly by it's own can do anything that other languages can do. But not anyone is able to archive that.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
I do not know what you mean with "powerful", assembly by it's own can do anything that other languages can do. But not anyone is able to archive that.
what i mean its very helpful when you need to do stuff requires assembly like indirect-syscalls just an example etc... yes assembly can be used to be standalone but thats not logic thats why people use c++ at least for me yes i know assembly and i can code in assembly but if c++ make it easier for me so yes i write in c++
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх