Done: Copy data as <language>

Wishlists for new functionality and features.
__vectorcall
Posts: 1
Joined: 11 May 2014 21:25

Done: Copy data as <language>

Post by __vectorcall »

Hello!

Currently HxD is able to copy the selected data as:
- Pascal
- C
- C#
- Java
- Visual Basic.NET

It is a feature that is very good and useful.

Have you ever considered adding more "copy as" languages?
I would like to see HxD that has ability to copy the data for example in the following languages:

- ASM
- Visual Basic 6
- Pure Basic
- Etc.

Hopefully this suggestion will be considered! :)
Polyg3m
Posts: 3
Joined: 11 May 2014 22:28

Re: Copy data as <language>

Post by Polyg3m »

This is a really nice suggestion. I would indeed also like to see this in the near feature (if possible).
Not many programs out there are capable of doing this, so that would be awesome.

Saludos
Maël
Site Admin
Posts: 1455
Joined: 12 Mar 2005 14:15

Re: Copy data as <language>

Post by Maël »

I would add Visual Basic 6, but unfortunately it does not support creating constant arrays of reasonable size. That's why it was removed and now there is only VB.NET which has a more flexible syntax.

What is the syntax for Pure Basic?

Do you really need those languages or is it nice to have?

I won't be adding random lists of languages as this requires work. So please make the "etc." explicit.
Polyg3m
Posts: 3
Joined: 11 May 2014 22:28

Re: Copy data as <language>

Post by Polyg3m »

Maël wrote: Do you really need those languages or is it nice to have?
Would be nice , i mean not many tools are as fast as HxD and support/have this ''feature''.
Maël wrote: I won't be adding random lists of languages as this requires work. So please make the "etc." explicit.
Assembly and Purebasic are mainly the ones i was hoping for, just to make work easier. And Indeed, Visual basic 6 is old and dead. Not sure how you did the array through i believe there is a trick in 6 with data type currency. This is also what people use for shellcodes in it.

Thanks for your reply!
Maël
Site Admin
Posts: 1455
Joined: 12 Mar 2005 14:15

Re: Copy data as <language>

Post by Maël »

Thanks. It would be helpful if you could tell me how to translate this into PureBasic:

Code: Select all

unsigned char rawData[256] = {
	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
	0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,
	0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
	0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
	0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53,
	0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,
	0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
	0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83,
	0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B,
	0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
	0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,
	0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
	0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB,
	0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
	0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3,
	0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB,
	0xFC, 0xFD, 0xFE, 0xFF
};
You don't need to convert every byte to PureBasic syntax, but what matters is that you can express any byte in the range of 0..255; ideally in hexadecimal notation, but that's not required. What also matters is how to define the size of an array and how to assign it a set of values.

Ideally I would want to avoid assigning every member individually like this:

Code: Select all

rawData[0x0] = 0x0;
rawData[0x1] = 0x1;
rawData[0x2] = 0x2;
rawData[0x3] = 0x3;
...
Danyfirex
Posts: 4
Joined: 16 May 2014 16:01

Re: Copy data as <language>

Post by Danyfirex »

@Mael for puebasic could use this way:

Code: Select all

Data.b $55,$8B,$EC,$81,$C4,$A4,$FA,$FF,$FF,$89,$45,$FC,$E8,$1B,$02,$00,$00,$89,$85,$CC
   Data.b $FD,$FF,$FF,$BB,$F2,$0F,$56,$C6,$8B,$95,$CC,$FD,$FF,$FF,$E8,$19,$02,$00,$00,$89
   Data.b $45,$F8,$BB,$A9,$8B,$80,$2D,$8B,$95,$CC,$FD,$FF,$FF,$E8,$06,$02,$00,$00,$89,$45
   Data.b $F4,$BB,$85,$3B,$AE,$DB,$8B,$95,$CC,$FD,$FF,$FF,$E8,$F3,$01,$00,$00,$89,$45,$F0
   Data.b $BB,$93,$35,$DF,$85,$8B,$95,$CC,$FD,$FF,$FF,$E8,$E0,$01,$00,$00,$89,$45,$EC,$BB
   Data.b $8D,$CB,$B6,$5D,$8B,$95,$CC,$FD,$FF,$FF,$E8,$CD,$01,$00,$00,$89,$45,$E8,$BB,$53
   Data.b $13,$C1,$78,$8B,$95,$CC,$FD,$FF,$FF,$E8,$BA,$01,$00,$00,$89,$45,$E4,$BB,$8A,$DB
   Data.b $DF,$A5,$8B,$95,$CC,$FD,$FF,$FF,$E8,$A7,$01,$00,$00,$89,$45,$E0,$BB,$2E,$05,$50
   Data.b $C8,$8B,$95,$CC,$FD,$FF,$FF,$E8,$94,$01,$00,$00,$89,$45,$DC,$BB,$85,$A1,$16,$A2
   Data.b $8B,$95,$CC,$FD,$FF,$FF,$E8,$81,$01,$00,$00,$E8,$06,$00,$00,$00,$6E,$74,$64,$6C
   Data.b $6C,$00,$5F,$57,$FF,$D0,$89,$85,$D0,$FD,$FF,$FF,$BB,$8B,$E3,$CD,$41,$8B,$D0,$E8

Saludos
Maël
Site Admin
Posts: 1455
Joined: 12 Mar 2005 14:15

Re: Copy data as <language>

Post by Maël »

Thanks for the hint. After some more research I could find this solution: http://www.forums.purebasic.com/english ... =3&t=53385

Modified slightly you get this:

Code: Select all

#RawDataItemCount = 9

DataSection
  DS_RawData:
  Data.b $09, $02, $03, $22, $01, $05, $06, $06, $07
EndDataSection

Structure RawDataArray
  Items.b[#RawDataItemCount]
EndStructure

Define *rawData.RawDataArray = ?DS_RawData


; examples for accessing the raw data

Define i

; print to debug output as decimal numbers
For i = 0 To #RawDataItemCount - 1
  Debug *rawData\Items[i]
Next

Debug ""

; print to debug output as hexadecimal numbers
For i = 0 To #RawDataItemCount - 1
  Debug "$" + RSet(Hex(*rawData\Items[i]), 2, "0")
Next
If you have any comments on the naming of the variables/constants/types, now is your chance to voice them.
Danyfirex
Posts: 4
Joined: 16 May 2014 16:01

Re: Copy data as <language>

Post by Danyfirex »

I always use this way

Code: Select all

DataSection
  DS_RawData:
  Data.b $09, $02, $03, $22, $01, $05, $06, $06, $07
EndDataSection

Define *DS_RawData = ?DS_RawData


Nothing more.

saludos
Maël
Site Admin
Posts: 1455
Joined: 12 Mar 2005 14:15

Re: Copy data as <language>

Post by Maël »

Code: Select all

For i = 0 To #RawDataItemCount - 1
  Debug *rawData[i]
Next
It's not possible to do array indexing then, similar to above, right? Also no boundary-checking I guess.

Please provide an example how you would iterate over the elements of the array using Debug statements.
Polyg3m
Posts: 3
Joined: 11 May 2014 22:28

Re: Copy data as <language>

Post by Polyg3m »

Seems like there is some progress. Cool!
Danyfirex
Posts: 4
Joined: 16 May 2014 16:01

Re: Copy data as <language>

Post by Danyfirex »

did you mean something like this:

Code: Select all

DataSection
  DS_RawData:
  Data.b $09, $02, $03, $22, $01, $05, $06, $06, $07
  DS_RawDataEnd:
EndDataSection


For i=0 To ?DS_RawDataEnd-?DS_RawData-1
  Debug PeekB(?DS_RawData+i)
Next

;Or 
Debug #CRLF$

For i=1 To ?DS_RawDataEnd-?DS_RawData
  Read.b DS_RawData
  Debug DS_RawData
Next

I don't know if is possible with use array indexing.

saludos
Maël
Site Admin
Posts: 1455
Joined: 12 Mar 2005 14:15

Re: Copy data as <language>

Post by Maël »

Right, thanks.

In this case I think the slightly longer example with the structure above is better, because it allows array indexing.

Any opinions on the naming of the identifiers in the code? Lower or Uppercase? Any naming conventions in PureBasic?
Danyfirex
Posts: 4
Joined: 16 May 2014 16:01

Re: Copy data as <language>

Post by Danyfirex »

That you want.


Saludos
Maël
Site Admin
Posts: 1455
Joined: 12 Mar 2005 14:15

Re: Copy data as <language>

Post by Maël »

Here is an alpha version of HxD that implements PureBasic export: http://mh-nexus.de/downloads/HxDalpha2.zip (1.62 MB)

This version is in German, but everything is at the same place as in the old version so it should be easy to find (Bearbeiten = Edit, Datei=File).
The export feature should work properly, if it doesn't please report it here in the forum. Other functions are not guaranteed to work since this is an alpha version.
Maël
Site Admin
Posts: 1455
Joined: 12 Mar 2005 14:15

Re: Copy data as <language>

Post by Maël »

Since there are no comments, I assume everything is fine.
Post Reply