J'ai besoin de comprendre juste une seule instruction et en conséquence je dois généraliser les choses.Comment générer des données pour l'instruction "mov"?
Je dois passer des structures (objets de types de données définis par l'utilisateur) à l'exécution en utilisant le code d'assemblage suivant.
Où suivant est le type de données défini par l'utilisateur à savoir WESContext:
typedef struct CWESContext
{
BSTR UserName;
BSTR MachineIP;
BSTR Certificate;
BSTR BrowserClienthandle;//Its the handle of the BrowserClient or Java Application Level Object
BSTR SessionID;
BSTR TaskID;// name of the original task
long LocaleID;//The location of the ultimate Caller
long FeatureID;//The feature ID mapping to some feature available in WESFW
long SessionTypeID;//Itmay be; Browser CLient Session, OPC Client Session, Authenticated OPC Clients session(as they have more rights), WESFWSystemClient.
SYSTEMTIME TimeStamp;//the time the original task was executed
DWORD Priority; //task priority of the original task
struct WESProductCategory
{
BSTR ProductCategoryName;
int serialNo;
struct WESDimensions
{
int weight;
struct WESVolume
{
int length;
int heigth;
int width;
} oVolume;
BSTR tempHeight;
BSTR otherUnknownDimensions;
} oDimensions;
} oWESProductCategory;
} CWESContext;
J'ai créé le bloc assez de taille WESContext et rempli avec les données de l'échantillon.
int sizeOfWESContext = sizeof(CWESContext);
void *pWESContext = malloc(sizeOfWESContext);
void *pGenericPtr = pWESContext;
memset(pWESContext,0,sizeOfWESContext);
BSTR *bstrUserName = (BSTR*)pGenericPtr;
*bstrUserName = SysAllocString(CT2OLE(CA2T(results.at(0).c_str())));
bstrUserName++;
pGenericPtr = bstrUserName;
BSTR *bstrMachineIp = (BSTR*)pGenericPtr;
*bstrMachineIp = SysAllocString(CT2OLE(CA2T(results.at(1).c_str())));
bstrMachineIp++;
pGenericPtr = bstrMachineIp;
BSTR *bstrCertificate = (BSTR*)pGenericPtr;
*bstrCertificate = SysAllocString(CT2OLE(CA2T(results.at(2).c_str())));
bstrCertificate++;
pGenericPtr = bstrCertificate;
.....................
so on so forth...............
Si je l'appelle en passant cela comme objet:
Appel Normaly: MyCallableMethodUDT (((CWESContext) pWESContext));
Maintenant, après l'assemblage je viens de tirer de la vue de désassemblage de Visual Studio pendant le débogage.
mov esi,dword ptr [pWESContext]
sub esp,58h
mov ecx,16h
mov edi,esp
rep movs dword ptr es:[edi],dword ptr [esi]
J'ai juste besoin de comprendre la 3e ligne ..
AS J'augmente membres à l'intérieur ma structure définie par l'utilisateur (i.e. ici WESContext) augmente, mais je ne peux pas conclure comment elle augmente ....? J'ai besoin de généraliser cette instruction de sorte que quel que soit l'objet et quelle que soit la taille et le type de données qu'il contient ... il devrait passer en l'appelant avec l'instruction d'assemblage comme écrit ci-dessus.
Cordialement, Usman
VEUILLEZ formater votre code! –