IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Problème avec un code


Sujet :

Assembleur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut Problème avec un code
    Bonjour, j'ai un soucis avec un code, je vous montre le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
     
    format PE console 5.0
    include 'include/windows/win32a.inc'
    entry start
     
     
    ;--------------------------------------------------
    section '.text' code readable executable
    ;--------------------------------------------------
     
    start:
     
    	push	NULL
    	push	FILE_ATTRIBUTE_NORMAL
    	push	OPEN_ALWAYS
    	push	NULL
    	push	NULL
    	push	GENERIC_WRITE
    	push	FilePath
    	call	[CreateFile]
     
    	mov	[hFile],eax
     
    	push	FILE_END
    	push	0
    	push	0
    	push	[hFile]
    	call	[SetFilePointer]
     
    	push	ip_addr
    	call	[inet_addr]
     
    	mov	[sockaddr],AF_INET
    	mov	dword [sockaddr+4],eax
     
         @@:
    	push	0
    	push	0
    	push	0
    	push	64
    	push	host
    	push	16
    	push	sockaddr
    	call	[getnameinfo]
     
    	mov	edi,host
    	call	strlen
     
    	push	NULL
    	push	BytesWrite
    	push	eax
    	push	host
    	push	[hFile]
    	call	[WriteFile]
     
    	inc	byte [sockaddr+6]
    	jnz	@b
     
    	inc	byte [sockaddr+5]
    	jnz	@b
     
    	push	[hFile]
    	call	[CloseHandle]
     
    	push	0
    	call	[ExitProcess]
     
     
    strlen:
    	xor	ecx,ecx
    	not	cx
    	cld
    	repnz	scasb
    	not	cx
    	dec	cx
    	mov	eax,ecx
    	ret
     
     
    ;--------------------------------------------------
    section '.data' data readable writeable
    ;--------------------------------------------------
     
    FilePath db 'file.txt',0
    hFile dd 0
    BytesWrite dd 0
     
    ip_addr db '*.*.*.*',0
     
    sockaddr rb 16
    host rb 64
     
    formh db '%08x',13,10,0
    formd db '%d',13,10,0
    forms db '%s',13,10,0
    formc db '%c',13,10,0
     
    ;--------------------------------------------------
    section '.idata' import data readable writeable
    ;--------------------------------------------------
     
    library kernel32,'kernel32.dll',\
    	msvcrt,'msvcrt.dll',\
    	user32,'user32.dll',\
    	wsock32,'ws2_32.dll'
     
    include 'include\windows\api\kernel32.inc'
    include 'include\windows\api\user32.inc'
    include	'include\windows\api\wsock32.inc'
     
    import msvcrt,\
    printf,'printf',\
    sprintf,'sprintf'
    C'est un scanner d’hôte. Je l'avais d'abord fait sous Linux un peu à la va-vite, mais il fonctionnait parfaitement, puis j'ai eu envie de le recoder pour Windows.
    Mais gros problème, j'ai un méchant dépassement de tampon visible dans le fichier "file.txt".
    Voilà ce que donne ce fichier:

    %08x
    %d
    %s
    %c
    X0 <0 p0 Ð0 J0 Ü0 kernel32.dll ws2_32.dll ˆ0 –0 ¤0 ²0 Ä0 P<×u*>×uðX×uÀB×u C×u CloseHandle CreateFileA ExitProcess SetFilePointer WriteFile è0 ö0 ðˆpvÀXov getna %08x
    %d
    %s
    %c
    X0 <0 p0 Ð0 J0 Ü0 kernel32.dll ws2_32.dll ˆ0 –0 ¤0 ²0 Ä0 P<×u*>×uðX×uÀB×u C×u CloseHandle CreateFileA ExitProcess SetFilePointer WriteFile è0 ö0 ðˆpvÀXov getna %08x
    %d
    %s
    %c
    Bon je n'ai pas copié tout le fichier texte parce qu'il est très gros, logique c'est fait pour scanner tout les hôtes de classe C et D, mais voilà en gros ce qui se répète sans cesse dans le fichier texte au lieu de me donner des nom d'hôtes.

  2. #2
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    je dirait que c'est ta fonction strlen qui renvoie pas correctement la longueur de la ligne a écrire dans le fichier

    je ferait plutôt un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    strlen:
    xor ecx,ecx
    xor eax,eax
    mov ebx,edi
    not ecx
    rep scasb
    sub edi,ebx
    mov eax,edi
    ret

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Pourtant c'est le strlen que j'utilisais avec mon code sous Linux et qui fonctionnait parfaitement.
    Bref j'ai fait un test au débogueur et effectivement mon strlen renvoi une valeur énorme alors que le tiens renvois la valeur 41.
    Mais ça ne change rien, maintenant dans le fichier texte j'ai le symbole % qui se répète tout le temps.
    Donc ce n'est pas ça.

    Mais j'ai l'impression qu'il y a un soucis avec getnameinfo.
    Car sous immunity debugger, toutes les fonctions apparaissent en bleu, sauf getnameinfo, qui apparait en gris sous le nom ws2_32.getnameinfo.
    C'est étrange, on dirait qu'il s'importe mal.. Pourtant je l'ai bien ajouté dans le fichier api de fasm..

  4. #4
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    ton strlen devait fonctionner car al devait par hasard être a zéro au moment de son appel
    rajoute "xor eax,eax" au début de ton strlen et il devrait fonctionner aussi. j'ai refait la fonction a ma sauce mais a part l'initialisation de al, la tienne doit fonctionner aussi

    regarde voir le code d'erreur renvoyé par getnameinfo, c'est pas zéro c'est sûr (sinon ta fonction strlen aurait fonctionné) il doit y avoir une erreur durant l'execution qui n'écrit que des % dans host

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Il me renvois la valeur 2760 soit 10080 en décimal.
    Mais cette valeur est introuvable dans les codes erreurs de winsock
    https://docs.microsoft.com/en-us/win...-error-codes-2

    Bref, maintenant je sais au moins que l'erreur vient bien de getnameinfo.
    Je vais lire la doc voir où est le problème, car je me suis juste contenté de copier les paramètres du getnameinfo que j'avais fait pour Linux, mais à mon avis ça ne doit être pareil sous Windows..

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    J'ai tenté d'écrire le code en c++ et visualstudio me dit que inet_addr est deprecated, et qu'il faut le remplacer par inet_pton, ce que j'ai fait dans mon code asm, mais ça n'a rien changé, toujours l'erreur 2760 pour getnameinfo

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Non en faite le getnameinfo de Linux et celui de Windows sont exactement les mêmes.
    Donc je ne vois vraiment pas d'où est le problème..
    Et ce code erreur qui ne correspond à rien c'est encore plus bizarre.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    C'est bon problème résolu, en faite j'ai confondu un D avec un 0.
    Le code erreur c'est en faite 276D donc 10093.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probléme avec mon code JAVA et MYSQL
    Par ulysse031 dans le forum JDBC
    Réponses: 5
    Dernier message: 10/05/2007, 00h46
  2. problème avec un code
    Par abiraa dans le forum C++
    Réponses: 1
    Dernier message: 10/04/2007, 15h39
  3. Petit problème avec un code : besoin de votre aide :)
    Par loicdu4000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2006, 18h02
  4. [MySQL] OU est le probléme avec ce code ??
    Par adlich dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/04/2006, 17h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo