Articles of assembly

Implémentation de la macro __emit__ de Borland dans GCC

Dans Borland, il existe une macro __emit__ , “une pseudo-fonction qui injecte des valeurs littérales directement dans le code de l’object” ( James Holderness ). Existe-t-il un équivalent pour gcc / g ++? (Je n’arrive pas à en trouver un dans la documentation) Sinon, comment pourrais-je l’implémenter dans mon code source C ++? L’utilisation peut […]

Lecture d’assemblage comparant la multiplication à la division

J’essaie de voir si dans notre compilation il y a un gain entre l’écriture x/3.0 contre const double one_over_three = 1.0 / 3.0; x * one_over_three; Mais j’ai besoin d’un peu d’aide pour lire l’assemblage, ce que je n’ai pas appris. J’ai compilé int div3(double x) { const double three = 1/3.0; return x*three; } […]

Comprendre ce que fait clang en assembleur, décrémenter une boucle incrémentée

Considérez le code suivant, en C ++: #include std::size_t count(std::size_t n) { std::size_t i = 0; while (i 1 ? std::atoll(argv[1]) : 1); } C’est juste une boucle qui incrémente sa valeur et la retourne à la fin. L’ asm volatile empêche l’optimisation de la boucle. Nous le clang++ 5.0 sous g++ 8.1 et clang++ […]

Assembly: la variable de stack C ++ adresse des adresses différentes / incorrectes?

Je ne comprends pas pourquoi obtenir l’adresse d’une variable est correct et que l’autre me renvoie 0xD qui se bloque alors en écrivant une valeur à une adresse non valide (0xD dans r.thefn(0); ). C’est la sortie qui montre les deux variables n’ayant pas une adresse similaire. Voici ce que GDB a montré et la […]

Atomic store. Des structures

J’ai compilé et analysé la sortie de l’assemblage pour: struct S{ public: int a,b,c,d,e,f,g,h,i,j,k; }; int main() { S s; std::atomic as; as.store(s); return 0; } Je veux voir comment est-il implémenté atomic store en fait. Il est facile d’aligner de “petits” opérandes. Mais maintenant, nous avons un opérande plus large, donc la situation est […]

Obtenir la version SSE sans __asm ​​sur x64

J’essaie de créer des versions légèrement modifiées de certaines fonctions de la bibliothèque CRT VS2010. Tout va bien, sauf pour les parties où elle tente d’accéder à une variable globale qui contient vraisemblablement la version ISA (Instruction Set Architecture Version): if (__isa_available > __ISA_AVAILABLE_SSE2) { // … } else if (__isa_available == __ISA_AVAILABLE_SSE2) { // […]

Quelle est la raison pour laquelle les données en lecture seule sont définies dans la section .text?

J’apprends l’assemblage et la programmation bas niveau et je lis un livre à ce sujet . Il est dit ici que nous pouvons placer n’importe quelles données dans la section .text d’un fichier elf mais, bien sûr, nous ne pouvons pas les transformer en raison d’permissions différentes des pages / segments. Mais il n’a pas […]

Écrire un nouveau jit

Je suis intéressé à démarrer mon propre projet JIT en C ++. Je ne suis pas si peu familiarisé avec l’assemblage, la conception du compilateur, etc., etc. pointeur de fonction. Alors, quelles sont les meilleures ressources pour créer une telle chose? Edit: Pour le moment, je ne m’intéresse qu’à x86 sous Windows, qui s’étendra un […]

g ++: as ne parvient pas à déterminer l’assembleur à exécuter

Aujourd’hui, j’ai voulu recomstackr l’un de mes projets. La compilation de ce projet avait déjà fonctionné sur ma machine, mais cette fois une erreur est survenue. La sortie du compilateur va: fatal error: as: unknown host architecture (can’t determine which assembler to run)` pour la ligne: g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB […]

Exécution d’un assemblage en ligne dans un environnement Linux (à l’aide de GCC / G ++)

J’ai donc un programme très basique écrit en C (fichier .c) avec une partie de codage d’assemblage en ligne. Je veux convertir le fichier .c en sortie d’assemblage que je connais mais ne sais pas comment comstackr ce code pour un environnement Linux. Lorsque j’utilise gcc ou g ++ pour des fichiers .cpp, des erreurs […]