Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is 0x%08lx?

I've been getting a lot of blue screens on my XP box at work recently. So many in fact that I downloaded debugging tools for windows(x86) and have been analyzing the crash dumps. So many in fact that I've changed the dumps to mini only or else I would probably end up tanking half a work day each week just waiting for the blue screen to finish recording the detailed crash log.

Almost without exception every dump tells me that the cause of the blue screen is some kind of memory misallocation or misreference and the memory at 0x%08lx referenced 0x%08lx and could not be %s.

Out of idle curiosity I put "0x%08lx" into Google and found that quite a few crash dumps include this bizarre message. Am I to take it that 0x%08lx is a place holder for something that should be meaningful? "%s" which is part of the concluding sentence "The memory could not be %s" definitely looks like it's missing a variable or something.

Does anyone know the provenance of this message? Is it actually supposed to be useful and what is it supposed to look like?

It's not a major thing I have always worked around it. It's just strange that so many people should see this in so many crash dumps and nobody ever says: "Oh the crash dump didn't complete that message properly it's supposed to read..."

I'm just curious as to whether anyone knows the purpose of this strange error message artefact.

like image 977
One Monkey Avatar asked Feb 11 '11 11:02

One Monkey


People also ask

What is LX in printf?

%lx means to print an argument of type unsigned long in hexadecimal. (There is no format to print a signed argument in hexadecimal.)

What is LX in Java?

LXFree for Java is an application for drawing light plots and generating paperwork. LXFree for Java combines drawing a light plot with editing information attached to graphic objects in the drawing.

What is %U in C programming?

unsigned specifier (%u) in C with Examples The format specifier is used during input and output. It is a way to tell the compiler what type of data is in a variable during taking input using scanf() or printing using printf().


2 Answers

0x%08lx and %s are almost certainly format specifiers for the C function sprintf. But looks like the driver developers did as good a job in their error handling code as they did in the critical code, as you should never see these specifiers in the GUI -- they should be replaced with meaningful values.

0x%08lx should turn into something like "0xE001D4AB", a hexadecimal 32-bit pointer value.

%s should be replaced by another string, in this case a description. Something like

the memory at 0xE001D4AB referenced 0xE005123F and could not be read.

Note that I made up the values. Basically, a kernel mode access violation occurred. Hopefully in the mini dumps you can see which module caused it and uninstall / update / whatever it.

like image 174
tenfour Avatar answered Oct 14 '22 15:10

tenfour


I believe it is just the placeholder for the memory address. 0x is a string prefix that would notify the user that it is an hexadecimal, while %08lx is the actual placeholder for a long int (l) converted to hexadecimal (x) with a padding of 8 zeroes (08).

like image 28
Andrea Spadaccini Avatar answered Oct 14 '22 14:10

Andrea Spadaccini