Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

erich8vb

[Resolvido] editor hexadecimal

Recommended Posts

Estou fazendo um software que ira guardar o registro no próprio executável com ajuda de um editor hexadecimal.

Encontrei dois exemplos de editor hex para vb na internet porem nenhum funciona corretamente.

 

gostaria de saber como eu converto um texto para Hax?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe amigos a minha ausência de conhecimento.

 

So quero entender a formula que eu postei. eu não consigo.

Só quero entendê-la.

Por favor, ajudem. Obrigado.

 

' Load and display the file.
Private Sub LoadFile(fname As String, ftitle As String)
Dim fnum As Integer
Dim num_bytes As Integer
Dim bytes() As Byte
Dim txt As String
Dim txt2 As String
Dim line1 As String
Dim line2 As String
Dim unk As String
Dim ch As Integer
Dim i As Integer
Dim j As Integer

	' Prepare the display.
	rchDisplay.Text = ""
	FileName = fname
	FileTitle = ftitle
	Caption = "HexDump [" & ftitle & "]"
	DoEvents

	' Read the file.
	fnum = FreeFile
	Open fname For Binary As #fnum
	num_bytes = LOF(fnum)
	ReDim bytes(1 To num_bytes)
	Get #fnum, , bytes
	Close fnum

	' Display the data.
	unk = Chr$(191)
	i = 1
	Do While i <= num_bytes
		line1 = Format$(i, "@@@@@@: ")
		line2 = ""
		For j = 0 To 7
			If i + j > num_bytes Then
				line1 = line1 & "   "
			Else
				ch = bytes(i + j)
				line1 = line1 & Format$(Hex$(ch), "@@ ")
				If ch >= 32 Then
					line2 = line2 & Chr$(ch)
				Else
					line2 = line2 & unk
				End If
			End If
		Next j
		txt = txt & line1 & vbCrLf
		txt2 = txt2 & line2
		i = i + 8
	Loop

	rchDisplay.Text = txt
	RichTextBox2.Text = txt2
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Erich, o que sua função está fazendo é abrindo um arquivo qualquer e armazendo seus dados de forma binária, no Read the Data.

 

Mais abaixo, nessa linha:

line1 = line1 & Format$(Hex$(ch), "@@ ")

Ele transforma de byte para hexa, e armazena em uma variável, que será exibida no rchDisplay

 

E na linha de baixo:

line2 = line2 & Chr$(ch)

Ele transforma de byte para nosso alfabeto, e também armazena em uma variável que será exibida no outro rich.

 

No seu caso, como o que você precisa é somente do código em hexa, salve somente a primeira parte. Só que no caso do código, ele está editando para que seja exibido bonitinho, com cada hexa separado por espaço, quebra de linha e na frente da linha uma indicação de qual ponto está iniciando.

 

Como você irá usar o hexa puro, armazene tudo grudado um ao outro, e depois construa uma função que leia essa código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Claudio agora eu entendo que a função que transforma de byte para alfabeto é esta “line2 = line2 & Chr$(ch)” e como eu transformo de alfabeto para byte, ou seja o caminho inverso.

Parece que trabalhar com alfabeto é mais fácil.

Acredito que para salvar tenho que fazer o caminho inverso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o asc(97) = "a" funsionou

mas é estranho ele retornou o valor 57

numero para numero?

e ele nao aceita letras.

 

Dim valor As String

valor = Asc(97)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei este código para testar e o valor não entra no text.

este nao funsionou

Text5.Text = Chr("a")

 

 

Acho que estou começando a entender.

É assim tem que pegar um byte no arquivo por que não tem como gerar um.

Ai se usa o Chr("a")

Será que é por isto q o valor não entra no text?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, você não uhu o que eu postei acima? O chr converte o byte para alfa. Então use chr(byte) para chegar à letra ou número que deseja.

Assim, quando tiver seu texto pronto você converte cada caractere em byte usando o asc.

Depois para o processo inverso você usa o chr.

Se ainda tiver dúvidas diz aí que tento fazer um exemplo pra você.

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pensei que trabalhar com alfabeto seria mais fácil até ver que o código converte qualquer byte acima de um determinado valor para “?”.

Vou ter que trabalhar com Hex.

Eu comparei o código de um editor de texto com o de Hex para ver se tem algo parecido.

 

Notei que ambos uzão um Do While para abrir o arquivo.

 

Não tenho um exemplo de como salvar em Hex mas o editor de texto salva assim.

 

On Error Resume Next

If Me.Caption = "Editor de Textos - Sem título" Then

sac_Click

Else

' Abre um arquivo de saída.

Open filename For Output As #1

' Assume o conteúdo digitado na caixa de texto.

strContents = Me.TxtDocumento.Text

' Escreve o conteúdo da variável com o texto no arquivo.

Print #1, strContents

' Fecha o arquivo.

Close #1

 

Gostaria de saber se eu posso salvar o Hex com um código igual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais uma coisa.

Tirei o espaço entre um Hex e outro Hex como você sugeriu. Porem note que os zeros “0” tem um espaço entre ele. O espaço vai dar problema?

 

4D5A90 0 3 0 0 0 4 0 0 0FFFF 0 0B8 0 0 0 0 0 0 040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0C0 0 0 0 E1FBA E 0B4 9CD21B8

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei este código para salvar não sei se vai funcionar, não testei ainda. Esta incompleto.

Estou no caminho certo?

 

Dim k As Long

Dim Charr As String

Dim Texto As String

Dim i As Integer

'Dim num_byte As Byte ‘<-- Estranho o vb diz que já existe esta variável.

 

k = 0

For k = 1 To Len(TxtDocumento)

Charr = (Mid(TxtDocumento, k, 1))

Texto = Texto + Charr

i = i + 1

If i = 2 Then

Charr = Texto

Texto = ""

i = 0

If Charr = " 0" Then

Charr = "0"

End If

num_byte = num_byte + Charr '<-- incompleto

End If

 

Next k

 

Open num_byte For Binary Access Write As #1 <-- Tirei estas três linhas de um editor de texto.

Print #1, num_byte

Close #1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você manteve isso no código: Format$(Hex$(ch), "@@ "), é o que está causando os espaços, pois isso faz que sempre fique com duas casas, como o 0 tem apenas uma casa ele preenche com espaço.

 

Agora só uma coisa Erich, já fiquei meio perdido no seu programa com tudo que fez, tem como postar o que já tem pronto até agora?

 

Onde você irá salvar o código (do registro)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei este código para salvar não sei se vai funcionar, não testei ainda. Esta incompleto.

Estou no caminho certo?

 

Dim k As Long

Dim Charr As String

Dim Texto As String

Dim i As Integer

'Dim num_byte As Byte ‘<-- Estranho o vb diz que já existe esta variável.

 

k = 0

For k = 1 To Len(TxtDocumento)

Charr = (Mid(TxtDocumento, k, 1))

Texto = Texto + Charr

i = i + 1

If i = 2 Then

Charr = Texto

Texto = ""

i = 0

If Charr = " 0" Then

Charr = "0"

End If

num_byte = num_byte + Charr '<-- incompleto

End If

 

Next k

 

Open num_byte For Binary Access Write As #1 <-- Tirei estas três linhas de um editor de texto.

Print #1, num_byte

Close #1

Não entendi o que quis fazer, mas está errado.

Você declarou num_byte com byte, mas está passando para ele o valor de Charr, e Charr é uma string, então dará erro.

 

O que tentou fazer? Tento te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta linha esta incompleta.

num_byte = num_byte + Charr '<-- incompleto

ficaria algo acim.

num_byte = num_byte & codigo(Charr)

Erich, você reparou que esse seu código, do jeito que está, está tentando transformar o nome do arquivo em hexa, e não seu conteúdo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao reparei. mas ele esta incompleto

para converter seria algo assim. nao é?

line2 = line2 & Chr$(ch)

mas este converte byte para alfa e nao Hex para byte.

 

Tenho muito o que aprender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.