User Tools

Site Tools


bune-practici

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
bune-practici [2015/11/30 16:48]
catalin.vasile3004 [Segmentation Fault debugging: GDB quicky]
bune-practici [2015/11/30 17:00]
catalin.vasile3004 [Segmentation Fault debugging: GDB quicky]
Line 221: Line 221:
 ./segfault param1 param2 param3 < fisier.in > fisier.out ./segfault param1 param2 param3 < fisier.in > fisier.out
 </​code>​ </​code>​
-''​set disassembly-flavor intel''​ vă ajută pentru a afişa eventualele printări de cod de asamblare într-o sintaxă cunoscută. Limbajul de asamblare reprezintă un set de alias-uri pentru instrucţiunile din binarul unui program. Aceste alias-uri nu au o formă standardizată motiv pentru care acestea diferă de la un asamblor la altul. By default, tool-urile din Linux folosesc sintaxa [[https://​en.wikibooks.org/​wiki/​X86_Assembly/​GAS_Syntax|AT&​T]]. 99% din tool-urile din Linux (gdb NU se află printre ele) pot primii argumentul ''​-M intel''​ pentru a afişa sau a trata codul de asamblare ca şi cum ar fi în sintaxa recomandată de Intel (care se regăseşte şi la NASM). Programe care pot primi acest flag sunt: gcc (gas), objdump, etc.+''​set disassembly-flavor intel''​ vă ajută pentru a afişa eventualele printări de cod de asamblare într-o sintaxă cunoscută. Limbajul de asamblare reprezintă un set de alias-uri pentru instrucţiunile din binarul unui program. Aceste alias-uri nu au o formă standardizată motiv pentru care acestea diferă de la un asamblor la altul. By default, tool-urile din Linux folosesc sintaxa [[https://​en.wikibooks.org/​wiki/​X86_Assembly/​GAS_Syntax|AT&​T]]. 99% din tool-urile din Linux (gdb NU se află printre ele) pot primii argumentul ''​-M intel''​ pentru a afişa sau a trata codul de asamblare ca şi cum ar fi în sintaxa recomandată de Intel (care se regăseşte şi la NASM). Programe care pot primi acest flag sunt: gcc (gas), objdump, etc.\\ 
 **Revenind la gdb**, în momentul în care rulăm o să ne dea următoarea eroare: **Revenind la gdb**, în momentul în care rulăm o să ne dea următoarea eroare:
 <code bash> <code bash>
Line 234: Line 234:
 </​code>​ </​code>​
 Pentru a vedea ce instrucţiunea a provocat segfault, putem da următoarea comandă: Pentru a vedea ce instrucţiunea a provocat segfault, putem da următoarea comandă:
-<​code>​+<​code ​bash>
 (gdb) display/10i $pc (gdb) display/10i $pc
 1: x/10i $pc 1: x/10i $pc
Line 251: Line 251:
   * **display** face dump de la un pointer dat ca argument, în cazul nostru **$pc**   * **display** face dump de la un pointer dat ca argument, în cazul nostru **$pc**
   * **i**-ul îi spune lui **display** să interpreteze datele de acolo ca şi cum ar fi instrucţiuni   * **i**-ul îi spune lui **display** să interpreteze datele de acolo ca şi cum ar fi instrucţiuni
-  * **10** îi sune lui **display** câţi operanzi/​instrucţiuni ​de tipul **i** (instrucţiune) să afişeze\\ \\ +  * **10** îi spune lui **display** câţi operanzi de tipul **i** (instrucţiune) să afişeze\\ \\ 
 Prin ''<​keep_printing+some_number>'',​ **gdb** incearcă să ne arate cam pe unde ar fi această instrucţiune. În cazul nostru instrucţiunea este aproape de label-ul **keep_printing**.\\ ​ Prin ''<​keep_printing+some_number>'',​ **gdb** incearcă să ne arate cam pe unde ar fi această instrucţiune. În cazul nostru instrucţiunea este aproape de label-ul **keep_printing**.\\ ​
 Pentru a vedea ce valoare a avut un registru la momentul în care s-a declanşat **segfault**-ul,​ puteţi da: Pentru a vedea ce valoare a avut un registru la momentul în care s-a declanşat **segfault**-ul,​ puteţi da:
bune-practici.txt · Last modified: 2015/11/30 21:08 by catalin.vasile3004