Problemi con allocazione dinamica

di smalldragon il
16 risposte
Salve a tutti
scusate se troverete nel forum C++ lo stesso problema avevo sbagliato forum.
per tanto chiedo agli amministratori di cancerlarlo da li per non creare confusione.
cosi come da titolo ho problemi ad accedere ad una struttura allocata in memoria.
che ho allocato con una funzione in c++
il problema è il seguente:
quando carico l'ultimo campo della struttura mi da un valore non congruo
dal dump della locazione risulta questo:
ba cc cc cc 0f 34 04 25 b0 03 97 00 bf
        
         Numero Struct     ;-------------------------------------
           attivo     db ? ;* deve essere BAH indica allocato   *
           attribbuto dd ? ;* flags campo nuerico               *
           valore     dd ? ;* Puntatore alle Cifre del Numero.  *
           fine_campo db ? ;* deve essere BFH.                   *
         Numero Ends       ;-------------------------------------
         
ho già provato a mettere dei campi prima per cercare di intercettare i 3 byte ( 03 97 00 ) "intrusi",credo che siano dei byte di controllo che servono al sistema ma non ne sono certo!
ho anche provato a mettere dei campi dopo a fine_campo con la speranza che gli "intrusi" venissero spostati dopo il campo che mi interessava!
ma gli "intrusi" si sono posizionati sempre prima del mio fine campo.
accedo alla struttura nel seguente modo:
                    Assume Esi:ptr Numero    
                        mov  esi,Arg1 
                        mov al,[esi].fine_campo
                        
vedendo il registro al=03 ma dovrebbe essere BFH
come posso fare a risolvere il problema?
sto compilando con visual studio 2019

16 Risposte

  • Stai usando il masm? VS con quale tipo di progetto?

    Mostra il codice che assegna i valori... insomma mostra di più altrimenti non si capisce

    Comunque secondo me i valori sono

    ba cc cc cc
    0f 34 04 25
    b0 03 97 00
    bf

    e i primi 3 cc sono aggiunti per l'allineamento
  • Grazie per la risposta
    e un normale progetto console misto c++ e assembler
    che altre informazioni ti servono?
  • Per fare dei test veloci posta il progetto (zippato) con i sorgenti che servono esclusivamente a fare una prova
  • Si uso masm di Visual Studio con opzioni di default
                  
                     Assume Esi:ptr Numero     ;-------------------------------
                            mov  esi,Arg1            ;* Verifica che la Variabile   *
                            cmp  [esi].attivo,186 ;* sia Allocata correttamente. *
                            jne  E0000                 ;-------------------------------
                            mov edx,[esi].attribbuto
                            mov edi,[esi].valore
                            mov al,[esi].fine_campo
                            cmp  [esi].fine_campo,191 ;251
                            jne  E0000
                            cmp  [esi].attribbuto,0
                            jne  A0001
    
  • Ok lo preparo e lo posto
  • E adesso come lo allego?
  • Usa un sito di sharing o dropbox o simili
  • E la parte assembler dov'è?
  • Come pensavo, è un problema di allineamento della struttura C

    Prima della

    struct Numero

    nel file .cpp devi scrivere

    #pragma pack(1)

    per allineare al byte
  • Devo metterla nel main oppure nel file che alloca la struttura?
  • Come ti ho detto nella linea precedente la

    struct Numero

    che includi nel file .cpp
  • L'ho messa nella struttura e funziona grazie
Devi accedere o registrarti per scrivere nel forum
16 risposte