Soyez le premier à donner votre avis sur cette source.
Snippet vu 6 745 fois - Téléchargée 28 fois
.586 .MMX .model flat, stdcall option casemap:none ;================================================ ; These are the Inlcude files for Window calls ;================================================ include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\ws2_32.inc include \masm32\include\advapi32.inc include \masm32\include\netapi32.inc ;=============================================== ; The Lib's for those included files ;================================================ includelib \masm32\lib\masm32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\ws2_32.lib includelib \masm32\lib\advapi32.lib includelib \masm32\lib\netapi32.lib ; --------------- Local Macros SzText MACRO Name, Text:VARARG LOCAL lbl jmp lbl Name db Text, 0 lbl: ENDM M2M MACRO M1, M2 push M2 pop M1 ENDM Return MACRO arg mov eax, arg ret ENDM val MACRO DDvalue LOCAL rvstring .data rvstring db 20 dup (0) align 4 .code push OFFSET rvstring push DDvalue call ltoa EXITM <OFFSET rvstring> ENDM .CONST PF_3DNOW_INSTRUCTIONS_AVAILABLE EQU 7 ; --------------------------------------------------------------------------- .data Screen_X dd 0 Screen_Y dd 0 MousePresent dd FALSE MouseWhell dd FALSE MMX_Available dd FALSE XMMI_Available dd FALSE D3_Available dd FALSE SysDirectory db MAX_PATH dup(0) WinDirectory db MAX_PATH dup(0) CurDirectory db MAX_PATH dup(0) TmpDirectory db MAX_PATH dup(0) MacAddress db 13 dup(0) IpAddress dd 100 dup(0) ComputerName db 32 dup(0) UserName db 32 dup(0) DomaineName db 128 dup(0) Free_Disk dd 0, 0 Total_Disk dd 0, 0 Free_Memory dd 0 Total_Memory dd 0 Frequence dd 0, 0 Time dd 0 Temp dd 0, 0 Disk db "c:\", 0 String_MacAdd db "* ", 0 .data? Bytes dd ? Buffer dd ? INT_64 dq ? Adapter_Stat STRUCT Adapt ADAPTER_STATUS <> ; The ADAPTER_STATUS structure contains information about a network adapter. NameBuff NAME_BUFFER 1Eh dup ({}) ; The NAME_BUFFER structure contains information about a local network name. Adapter_Stat ENDS l_ASTAT Adapter_Stat <> l_ENUM LANA_ENUM <> ; The LANA_ENUM structure contains the numbers for the current LAN adapters. l_NCB NCB <> ; The NCB structure represents a network control block Memory MEMORYSTATUS <> .code ; --------------------------------------------------------------------------- start: call init invoke MessageBox, 0, ADDR UserName, ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR ComputerName, ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR DomaineName, ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR WinDirectory, ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR SysDirectory, ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR CurDirectory, ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR TmpDirectory, ADDR ComputerName, MB_OK invoke MessageBox, 0, val(Total_Disk), ADDR ComputerName, MB_OK invoke MessageBox, 0, val(Free_Disk), ADDR ComputerName, MB_OK invoke MessageBox, 0, val(Total_Memory), ADDR ComputerName, MB_OK invoke MessageBox, 0, val(Free_Memory), ADDR ComputerName, MB_OK invoke MessageBox, 0, val(Screen_X), ADDR ComputerName, MB_OK invoke MessageBox, 0, val(Screen_Y), ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR MacAddress, ADDR ComputerName, MB_OK invoke MessageBox, 0, val(Frequence), ADDR ComputerName, MB_OK invoke MessageBox, 0, ADDR IpAddress, ADDR ComputerName, MB_OK ;================== ; Leave the program ;================== push eax ; [in] Exit code for the process and all threads terminated as a result of this call. call ExitProcess ret init proc .code ; ========= ; User name ; ========= mov Buffer, 32 push offset Buffer ; [in, out] On input, this variable specifies the size of the lpBuffer buffer, in TCHARs. On output, the variable receives the number of TCHARs copied to the buffer, including the terminating null character. push offset UserName ; [out] Pointer to the buffer to receive the null-terminated string containing the user's logon name. call GetUserName ; If the function succeeds, the return value is a nonzero value(Len of UserName+1) ; ============= ; Computer Name ; ============= mov Buffer, 32 push offset Buffer ; [in, out] On input, specifies the size of the buffer, in TCHARs. On output, receives the number of TCHARs copied to the destination buffer, not including the terminating null character. push offset ComputerName ; [out] Pointer to a buffer that receives a null-terminated string containing the computer name or the cluster virtual server name. push 0 ; [in] Type of name to retrieve call GetComputerNameEx ; If the function succeeds, the return value is a nonzero value. ; ============ ; Domaine Name ; ============ mov Buffer, 128 push offset Buffer ; [in, out] On input, specifies the size of the buffer, in TCHARs. On output, receives the number of TCHARs copied to the destination buffer, not including the terminating null character. push offset DomaineName ; [out] Pointer to a buffer that receives a null-terminated string containing the computer name or the cluster virtual server name. push 2 ; [in] Type of name to retrieve call GetComputerNameEx ; If the function succeeds, the return value is a nonzero value. ; ================= ; Windows Directory ; ================= push MAX_PATH ; [in] Size of the string buffer in TCHARs push offset WinDirectory ; [out] Pointer to a string buffer that receives the null-terminated string Call GetWindowsDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character. ; ================ ; System Directory ; ================ push MAX_PATH ; [in] Size of the string buffer in TCHARs push offset SysDirectory ; [out] Pointer to a string buffer that receives the null-terminated string Call GetSystemDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character. ; ================= ; Current Directory ; ================= push offset CurDirectory ; [out] Pointer to a string buffer that receives the null-terminated string push MAX_PATH ; [in] Size of the string buffer in TCHARs Call GetCurrentDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character. ; ============== ; Temp Directory ; ============== push offset TmpDirectory ; [out] Pointer to a string buffer that receives the null-terminated string push MAX_PATH ; [in] Size of the string buffer in TCHARs Call GetTempPath ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character. ; ========= ; Disk info ; ========= push offset Free_Disk push offset Total_Disk push offset INT_64 push offset Disk ; [in]Pointer to a null-terminated string that specifies a directory on the disk. If this parameter is NULL, the function uses the root of the current disk. call GetDiskFreeSpaceEx ; If the function succeeds, the return value is nonzero. ; ++++++++++++++++ ; Total Space Disk ; ++++++++++++++++ mov eax, [Total_Disk+4] mov ebx, [Total_Disk] shl eax, 16 ; push high bytes of eax in low bytes shr ebx, 16 ; push low bytes of ecx in high bytes add eax, ebx shr eax, 4 ; 4+16=20 convert octets in mega octect mov Total_Disk, eax ; +++++++++++++++++++++ ; Free disk space Total ; +++++++++++++++++++++ mov eax, [Free_Disk+4] mov ebx, [Free_Disk] shl eax, 16 ; push high bytes of eax in low bytes shr ebx, 16 ; push low bytes of ecx in high bytes add eax, ebx shr eax, 4 ; 4+16=20 convert octets in mega octect mov Free_Disk, eax ; =========== ; Free Memory ; =========== push OFFSET Memory call GlobalMemoryStatus mov eax, Memory.dwTotalPhys ; bytes of physical memory shr eax, 20 ; convert octect to Mo mov Total_Memory, eax mov eax, Memory.dwAvailPhys ; free physical memory bytes shr eax, 20 ; convert octect to Mo mov Free_Memory, eax ;========================================== ; Get the Screen resolution ;========================================== push SM_CXSCREEN ; Width of the screen of the primary display monitor, in pixels. call GetSystemMetrics ; If the function succeeds, the return value is the requested system metric or configuration setting else zero. Mov Screen_X, eax push SM_CYSCREEN ; Height of the screen of the primary display monitor, in pixels. call GetSystemMetrics ; If the function succeeds, the return value is the requested system metric or configuration setting else zero. Mov Screen_Y, eax ; ===================== ; Scan if mouse present ; ===================== push SM_MOUSEPRESENT ; Scan if mouse is present. call GetSystemMetrics ; Nonzero if a mouse is installed; zero otherwise. or eax, eax jz NoMouse mov MousePresent, TRUE NoMouse: ; =================== ; Scan if mouse Wheel ; =================== push SM_MOUSEWHEELPRESENT ; Scan if mouse Wheel. call GetSystemMetrics ; Nonzero if a mouse with a wheel is installed; zero otherwise. or eax, eax jz NoWheel mov MouseWhell, TRUE NoWheel: ; =============== ; GET MAC ADDRESS ; =============== mov l_NCB.ncb_command, NCBENUM mov l_NCB.ncb_length, SIZEOF l_ENUM mov l_NCB.ncb_buffer, OFFSET l_ENUM ; *************************************************************************************** ; The Netbios function interprets and executes the specified network control block (NCB). ; *************************************************************************************** push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block. call Netbios ; For synchronous requests, the return value is the return code of the NCB structure ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; The RtlZeroMemory routine fills a block of memory with zeros, given a pointer to the block and the length, in bytes, to be filled. ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ push SIZEOF l_NCB ; Specifies the number of bytes to be zeroed. push OFFSET l_NCB ; Pointer to the memory to be filled with zeros. call RtlZeroMemory ; No return mov l_NCB.ncb_command, NCBRESET mov esi, OFFSET l_ENUM.lana mov al, [esi + ecx] mov l_NCB.ncb_lana_num, al ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; The Netbios function interprets and executes the specified network control block (NCB). ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block. call Netbios ; For synchronous requests, the return value is the return code of the NCB structure mov l_NCB.ncb_command, NCBASTAT ; +++++++++++++++++++++++++++++++++++++++++++++++++ ; The lstrcpy function copies a string to a buffer. ; +++++++++++++++++++++++++++++++++++++++++++++++++ push OFFSET String_MacAdd ; [in] Pointer to the null-terminated string to be copied. push OFFSET l_NCB.ncb_callname ; [out] Pointer to a buffer to receive the contents of the string pointed to by the lpString2 parameter. The buffer must be large enough to contain the string, including the terminating null character. call lstrcpy ; If the function succeeds, the return value is a pointer to the buffer. mov l_NCB.ncb_length, SIZEOF l_ASTAT mov l_NCB.ncb_buffer, OFFSET l_ASTAT ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; The Netbios function interprets and executes the specified network control block (NCB). ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block. call Netbios ; For synchronous requests, the return value is the return code of the NCB structure ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ ; 6 byte Binary Conversion to ASCII HEX (12 characters) ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ mov esi, OFFSET l_ASTAT.Adapt.adapter_address mov edi, OFFSET MacAddress xor ecx, ecx xor ebx, ebx mov cl, 0Bh mov bl, 05h bintohex: mov al, [esi + ebx] push eax and al, 00001111b add al, 90h daa adc al, 40h daa mov [edi + ecx], al dec ecx pop eax shr al, 4h and al, 00001111b add al, 90h daa adc al, 40h daa mov [edi + ecx], al dec ebx dec ecx jns bintohex ; ======================= ; GET Processor Frequence ; ======================= call GetTickCount ; The return value is the number of milliseconds that have elapsed since the system was started. mov Time, eax ; Time reference rdtsc ; Number of cycle since boot shr eax,2 ; for support proccessor more speed than 4 Ghz (4*2^2=16) mov ebx, eax ; save the result in ebx time_wait: ; loop since 1, 048 seconds call GetTickCount; The return value is the number of milliseconds that have elapsed since the system was started. sub eax, Time ; compare eax with time reference cmp eax, 1048 ; while time <1.048 seconds (2^20 microseconds) jl time_wait rdtsc ; Number of cycle since boot shr eax,2 ; for support proccessor more speed than 4 Ghz (4*2^2=16) sub eax, ebx ; Number of cycle in the lap time shr eax, 18 ; Get ony the Mega cycle (18+2=20) mov Frequence, eax ; ===================== ; GET Processor Feature ; ===================== ; ++++++++++++++++++++ ; MMX instruction set ; ++++++++++++++++++++ push PF_MMX_INSTRUCTIONS_AVAILABLE call IsProcessorFeaturePresent mov MMX_Available, eax ; +++++++++++++++++++ ; SSE instruction set ; +++++++++++++++++++ push PF_XMMI_INSTRUCTIONS_AVAILABLE call IsProcessorFeaturePresent mov XMMI_Available, eax ; ++++++++++++++++++++++ ; 3D-Now instruction set ; ++++++++++++++++++++++ push PF_3DNOW_INSTRUCTIONS_AVAILABLE call IsProcessorFeaturePresent mov D3_Available, eax ; ============== ; Get IP Address ; ============== push offset IpAddress ; [out] Pointer to the WSADATA data structure that is to receive details of the Windows Sockets implementation. push 202h ; [in] Highest version of Windows Sockets support that the caller can use. call WSAStartup ; function returns zero if successful. Otherwise, it returns one of the error codes listed in the following. push offset ComputerName ; [in] Pointer to the null-terminated name of the host to resolve. call gethostbyname ; If no error occurs, gethostbyname returns a pointer to the hostent structure. mov ecx, [eax] + 12 ; h_addr_list of the hostent structure. mov ebx, [ecx] mov eax, [ebx] mov ebx, offset IpAddress push eax ; Pointer to an in_addr structure that represents an Internet host address. call inet_ntoa ; The inet_ntoa function converts an (Ipv4) Internet network address into a string in Internet standard dotted format. iploop: mov cl, [eax] mov [ebx], cl inc eax inc ebx test cl, cl jnz iploop ret init endp end start
23 mars 2005 à 21:10
Bon Coding...
ManChesTer.
22 mars 2005 à 08:28
21 mars 2005 à 23:38
sub esp, TailleDeLaStruct
21 mars 2005 à 23:19
Pour les invoke messagebox, j'avoue que j'ai eu la fleme de faire un tas de push a la volé,
Et cela me paraissait plus simple a comprendre. Par contre je ne suis pas arriver a faire un push de
la structure 'memory' , j'ai essayé en creant moi meme la structures dans les datas, mais cela ne me paraissait pas optimisé, qq aurait-il un idée de comment je peut procédé ?
Sinon DakM, ce code n'a pas été pomper d'un autre site, je me suis inspiré de ce que font les autres, normal, je ne suis qu'un debutant sur l'asm x86, j'ai quelques bases de Z80 qui remontent a une vingtaine années.
J'utilise RadAsm pour faire le code, est il est vrai que comme cela il parait fouilli, alors que sur RAd c'est bien plus lisible.
21 mars 2005 à 21:15
Certes ici l'intérêt est de montrer l'utilisation de différentes fonctions.... mais on voit que ça reste "foulli" ton code... (cf remarques d'en haut)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.