Storing hex value in C string?
binary, c, gdb, hex
Solution
I think your problem has to do with the way you're printing the variable in gdb. Take this simple program, compile as debug (`-g` if using gcc), and run and break at the first `puts` statement:
int main(void)
{
char *ptr = "str \xff";
char arr[] = "str \xff";
puts(ptr);
puts(arr);
return 0;
}
If I try and print `ptr` the way you've mentioned, `p /x ptr`, it'll print the value of `ptr` (the address it's pointing to):
(gdb) p /x ptr
$1 = 0x4005f8
However if I do the same command for `arr`, I'll get:
(gdb) p /x arr
$2 = {0x73, 0x74, 0x72, 0x20, 0xff, 0x0}
That's because gdb can see that `arr` is of type `char[6]` and not `char*`. You can get the same results with the command `p /x "str \xff"`, which is useful for testing things:
(gdb) p /x "str \xff"
$3 = {0x73, 0x74, 0x72, 0x20, 0xff, 0x0}
Now if you want to be able to print a certain amount of bytes from the address pointed to by a pointer, use the examine (`x`) memory command instead of print (`p`):
(gdb) x/6bx ptr
0x4005f8 <__dso_handle+8>: 0x73 0x74 0x72 0x20 0xff 0x00
That'll print 6 bytes in hex from the address pointed to by `ptr`. Try that with your `buff` variable and see how you go.
Alternatively, another thing you can try is:
(gdb) p /x (char[6])*ptr
$4 = {0x73, 0x74, 0x72, 0x20, 0xff, 0x0}
This will treat the `char` pointed to by `ptr` as the first element in an array of 6 `char`s, and will allow you to use the print command.
Problem
I have a string `"SOMETHING /\xff"` and I want to save the hex representation of `0xff` into a `char` buffer. So I `strncpy` everything after the forward slash (`/`) into my buffer (let's call it `buff`). However, when I use the gdb command `print \x buff` to view the contents of `buff`, it doesn't show `0xff`. Any ideas as to what could be wrong? Is it possible that my forward slash is messing things up?