Jump to content

Baracat

Apoiadores
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

6 Neutral

About Baracat

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Baracat

    Carregando

    Hahahahaha... Eu faço isso desde sempre!
  2. Fala Brother, Eu vi teu código em C aqui em cima, e comecei a pensar em fazer a operação reversa (ip => int). Uma coisa foi levando a outra, e no fim eu fiz isso. =D Pra o código funcionar: Cola esse código em um arquivo de nome ip2int.c Compila com - gcc -o ip2int ip2int.c Cria um link simbólico - ln -s ip2int int2ip #include <stdio.h> #include <stdlib.h> #include <string.h> /* * * Se precisar testar o programa * O inteiro 3232235521 gera o IP 192.168.0.1 * */ int main(int argc, unsigned char **argv){ // Como usar o programa if(argc != 2){ printf("Uso:\n\nip2int: <ip address>\nint2ip: <inteiro>\n"); return 1; } // Basename const char *exename = strrchr(argv[0], '/'); if (exename) // skip past the last / ++exename; else exename = argv[0]; if(strcmp(exename,"int2ip")==0){ // Se o nome do binario for int2ip int i = atoi(argv[1]); printf("%d.%d.%d.%d\n", (i>>24) & 0xff, (i>>16) & 0xff, (i>>8) & 0xff, i & 0xff); } else if (strcmp(exename,"ip2int")==0){ // Se o nome do binario for ip2int const char *sourceString = argv[1]; unsigned short len=0; unsigned char cnt=0,cnt1=0,i,buf[5]; unsigned int output = 0, oct = 0; len=strlen(sourceString); for(i=0;i<len;i++) { if(sourceString[i]!='.'){ buf[cnt++] =sourceString[i]; } if(sourceString[i]=='.' || i==len-1){ buf[cnt]='\0'; cnt=0; oct=atoi(buf); output = output<<8; output |= oct; if(oct>255){ printf("IP address invalido - %u\n",oct); return 1; } } } printf("%u\n",output); } else { printf("Tenha certeza que o binario tenha o nome ip2int\ne crie um link simbolico para ele chamado int2ip."); // Se o nome do binario for qualquer outra coisa diferente } return 0; } Se vc chamar ./ip2int 192.168.0.1 , ele cospe 3232235521. Se vc chamar ./int2ip 3232235521 , ele cospe 192.168.0.1 Compartilhando... =D Abs!
  3. Olá Luciano, Faz um tempo que não vejo isso, então eu posso falar alguma besteira. A internet tá cheia de exemplos (em ingês). Quando vc faz: MOV eax,ebx Você está movendo o CONTEÚDO - o valor - de ebx para eax. Ou seja, a operação se passa de registrador para registrador. Para mover o conteúdo de um registro para a memória - ou vice-versa - você precisa fazer a chamada por referência - passar o endereço. Então, MOV eax,[ebx] ; <== Repara nos colchetes Você está movendo o que está no ENDEREÇO - contido em ebx - para eax. (Memória para registrador) MOV [eax],ebx ; <== Repara nos colchetes Você esta movendo o que está contido em ebx para o ENDEREÇO contido em eax. (Registrador para memória) Você pode criar static data regions (tipo variáveis globais)... .DATA var DD 3000 ; Inicializa com 3000, uma área de memória de 4 bytes e dá o nome para essa área de var. E aí, usar a seguinte instrução: mov [var], ebx ; Move o conteúdo de EBX para os 4 bytes no endereço de memória var Dá uma olhada nesse site, é um exemplo dos que te falei. http://www.cs.virginia.edu/~evans/cs216/guides/x86.html Espero ter ajudado. =D Abs,
  4. Olá, Durante um treinamento aqui no MenteBinária, fiz uma coisa parecida. E disponibilizei o código no GitHub. Dá uma olhada e vê se interessa... 😃 https://github.com/lbaracat/MenteBinaria/blob/master/reg.cpp Abs,
×
×
  • Create New...