Articles of assemblage de

Quelles sont les valeurs communes pour la mémoire non initialisée pour le débogage?

Il y a longtemps, j’ai appris à remplir 0xDEADBEEF avec de la mémoire non utilisée / non initialisée 0xDEADBEEF Ainsi, dans un débogueur ou un rapport d’ 0xDEADBEEF si je vois cette valeur, je sais que je regarde la mémoire non initialisée. J’ai vu un rapport d’ 0xBBADBEEF iOS utilise 0xBBADBEEF . Quelles autres valeurs […]

Pourquoi l’initialisation d’une chaîne dans une fonction ne fonctionne-t-elle pas de la même manière que int lors du débogage

J’ai donc essayé de déboguer certains programmes C simples aujourd’hui; Le premier étant int main(){ int a ,b ; return 0 ; } Ce qui, une fois compilé, m’a donné push ebp mov ebp,esp sub esp,008h parce que j’ai besoin de 8 octets pour stocker a et b dans le cadre de stack actuel, car […]

Comment fonctionnent les barrières de mémoire?

J’ai besoin de comprendre les barrières de mémoire dans les machines multicœurs. Dis que j’ai ce code Core 1 mov [_x], 1; mov r1, [_y] Core 2 mov [_y], 1; mov r2, [_x] Maintenant, les résultats inattendus sans barrière de mémoire seraient que r1 et r2 peuvent être égaux à 0 après exécution. À mon […]

(assemblage en ligne en C) Erreur de segmentation mémoire drôle

J’ai la partie suivante dans mon code d’assemblage asm “LOOP%=:\n\t” “movapd (%%eax), %%xmm4\n\t” “addl $32, %%eax\n\t” “movsd (%%edx), %%xmm5\n\t” “addl $16, %%edx\n\t” “movapd %%xmm4, %%xmm6\n\t” “subl $1, %%ecx\n\t” “unpcklpd %%xmm5, %%xmm5\n\t” “testl %%ecx, %%ecx\n\t” “mulpd %%xmm5, %%xmm6\n\t” “movsd -8(%%edx), %%xmm7\n\t” “addpd %%xmm6, %%xmm0\n\t” “movapd -16(%%eax), %%xmm6\n\t” “unpcklpd %%xmm7, %%xmm7\n\t” “mulpd %%xmm6, %%xmm5\n\t” “addpd %%xmm5, %%xmm1\n\t” […]

Où sont mis en place les segments de stack, données et instructions?

La segmentation de la mémoire a donc été abandonnée dans x86-64, mais lorsque nous utilisons l’assembly, nous pouvons spécifier des sections / segments .code et .data dans notre code, ainsi que le registre du pointeur de stack. Et les registres de segments de stack, de données et de code. Comment et où se produit cette […]

Processus de récupération TSC du processeur, en particulier dans un environnement multi-processeurs multicœurs

Dans le monde Linux, pour obtenir des timers / timers de précision en nanosecondes, on peut utiliser: #include int foo() { timespec ts; clock_gettime(CLOCK_REALTIME, &ts); //–snip– } Cette réponse suggère une approche asm permettant d’interroger directement l’horloge du processeur avec l’instruction RDTSC . Dans une architecture multicœur et multiprocesseur, comment cette horloge / valeur de […]

Comment puis-je me débarrasser de l’appel __x86.get_pc_thunk.ax

J’ai essayé de comstackr et de convertir un programme C très simple en langage assembleur. J’utilise Ubuntu et le type de système d’exploitation est 64 bits. Ceci est le programme C. void add(); int main() { add(); return 0; } si j’utilise gcc -S -m32 -fno-asynchronous-unwind-tables -o simple.S simple.c voici comment mon fichier de code […]

Comptez le nombre 1 dans les positions impaires d’un tableau de nombres 32 bits

J’implémente une fonction d’assemblage simple appelée via un programme en c, pour compter combien il y en a 1 dans la position impaire d’un tableau sur 32 bits. Le premier argument passé à la fonction est le pointeur sur le tableau, le second le nombre d’éléments. Je ne comprends pas ce que ça va en […]

Comment la mémoire détermine-t-elle le type de données de la variable?

Supposons que cette valeur soit stockée dans ma mémoire. Comment la mémoire déterminera-t-elle qu’il s’agit d’une chaîne ou d’un type de données int .How?

strlen vectorisé s’en tirer avec la lecture de mémoire non allouée

Lorsque j’étudie l’implémentation de strlen par OSX 10.9.4, je remarque qu’il compare toujours un bloc de 16 octets et qu’il passe aux 16 octets suivants jusqu’à ce qu’il rencontre un ‘\0 ‘. La partie pertinente: 3de0: 48 83 c7 10 add $0x10,%rdi 3de4: 66 0f ef c0 pxor %xmm0,%xmm0 3de8: 66 0f 74 07 pcmpeqb […]