Anyone have hints for me on how I can disassemble a binary file using
objdump, do some modifications and then recompile everything ?
thanks,
--Ben 11 19880
Benoit Lefebvre wrote:
Anyone have hints for me on how I can disassemble a binary file using
objdump, do some modifications and then recompile everything ?
No. This cannot be done. Disassembly gives you assembler code which a C
compiler cannot compile. Also often disassembly is very difficult to
figure out and modifications might lead to errors. If source is not
accessible and you must modify the binary then ask in a platform
specific group. For example if you are disassembling x86 machine code
ask in <news:comp.lang.asm.x86or <news:alt.lang.asm>.
On Dec 6, 9:51 pm, Benoit Lefebvre <benoit.lefeb...@gmail.comwrote:
Anyone have hints for me on how I can disassemble a binary file using
objdump, do some modifications and then recompile everything ?
How about something like this? You could easily enhance it to report
any errors that occur.
#include <stdio.h>
int main(void)
{
FILE *fp, *fq;
int c;
if(fp=fopen("progname", "rb")) {
if(fq=fopen("progname-new", "wb")) {
while((c=fgetc(fp))!=EOF) {
c ^= 0x42; /* <--- supply the desired modification here */
if(fputc(c, fq)==EOF)
break;
}
fclose(fq);
}
fclose(fp);
}
return 0;
}
>
thanks,
You're welcome.
--Ben
On Dec 6, 4:55 pm, santosh <santosh....@gmail.comwrote:
Benoit Lefebvre wrote:
Anyone have hints for me on how I can disassemble a binary file using
objdump, do some modifications and then recompile everything ?
No. This cannot be done. Disassembly gives you assembler code which a C
compiler cannot compile. Also often disassembly is very difficult to
figure out and modifications might lead to errors. If source is not
accessible and you must modify the binary then ask in a platform
specific group. For example if you are disassembling x86 machine code
ask in <news:comp.lang.asm.x86or <news:alt.lang.asm>.
And... can't an asm compiler recompile the code ?
Benoit Lefebvre wrote:
On Dec 6, 4:55 pm, santosh <santosh....@gmail.comwrote:
>Benoit Lefebvre wrote:
Anyone have hints for me on how I can disassemble a binary file
using objdump, do some modifications and then recompile everything
?
No. This cannot be done. Disassembly gives you assembler code which a C compiler cannot compile. Also often disassembly is very difficult to figure out and modifications might lead to errors. If source is not accessible and you must modify the binary then ask in a platform specific group. For example if you are disassembling x86 machine code ask in <news:comp.lang.asm.x86or <news:alt.lang.asm>.
And... can't an asm compiler recompile the code ?
It could, but that's off-topic here.
santosh wrote:
>
Benoit Lefebvre wrote:
On Dec 6, 4:55 pm, santosh <santosh....@gmail.comwrote:
Benoit Lefebvre wrote:
Anyone have hints for me on how I can disassemble a binary file
using objdump, do some modifications and then recompile everything
?
No. This cannot be done. Disassembly gives you assembler code which a
C compiler cannot compile. Also often disassembly is very difficult
to figure out and modifications might lead to errors. If source is
not accessible and you must modify the binary then ask in a platform
specific group. For example if you are disassembling x86 machine code
ask in <news:comp.lang.asm.x86or <news:alt.lang.asm>.
And... can't an asm compiler recompile the code ?
Assuming the disassembler got everything correct, perhaps. But,
I doubt that it would generate code that could be modified and
then properly recompiled without considerable effort, in all but
the simplest of programs.
Consider a simple disassembly of:
push 0x1234
Is "0x1234" a constant, or the address of a variable?
It could, but that's off-topic here.
"What he said."
(And why has no one brought up the "cow from hamburger" analogy yet?)
--
+-------------------------+--------------------+-----------------------+
| Kenneth J. Brody | www.hvcomputer.com | #include |
| kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer.h|
+-------------------------+--------------------+-----------------------+
Don't e-mail me at: <mailto:Th*************@gmail.com>
Kenneth Brody wrote:
santosh wrote:
Benoit Lefebvre wrote:
On Dec 6, 4:55 pm, santosh <santosh....@gmail.comwrote:
>Benoit Lefebvre wrote:
Anyone have hints for me on how I can disassemble a binary file
using objdump, do some modifications and then recompile everything
?
>>
>No. This cannot be done. Disassembly gives you assembler code which a
>C compiler cannot compile. Also often disassembly is very difficult
>to figure out and modifications might lead to errors. If source is
>not accessible and you must modify the binary then ask in a platform
>specific group. For example if you are disassembling x86 machine code
>ask in <news:comp.lang.asm.x86or <news:alt.lang.asm>.
>
And... can't an asm compiler recompile the code ?
Assuming the disassembler got everything correct, perhaps. But,
I doubt that it would generate code that could be modified and
then properly recompiled without considerable effort, in all but
the simplest of programs.
Consider a simple disassembly of:
push 0x1234
Is "0x1234" a constant, or the address of a variable?
Correct me if I'm wrong; I've never used one - but wouldn't "push
0x1234" be the output from a disassember, rather than the input? I
thought a disassembler is something which takes machine code and
converts it to corresponding assembler code. As such it should be a
perfectly straightforward task to reassemble the results.
I think what you (and the OP) are thinking about is a decompiler:
something that takes assembly language and converts it into a high-
level language like C. That would run into precisely the problems you
mention.
Benoit Lefebvre wrote:
santosh <santosh....@gmail.comwrote:
>Benoit Lefebvre wrote:
>>Anyone have hints for me on how I can disassemble a binary file using objdump, do some modifications and then recompile everything ?
No. This cannot be done. Disassembly gives you assembler code which a C compiler cannot compile. Also often disassembly is very difficult to figure out and modifications might lead to errors. If source is not accessible and you must modify the binary then ask in a platform specific group. For example if you are disassembling x86 machine code ask in <news:comp.lang.asm.x86or <news:alt.lang.asm>.
And... can't an asm compiler recompile the code ?
No such thing exists. Assemblers 'assemble' from assembly source
code, which code describes each individual machine instruction.
The assembly language is different for every type of CPU, and often
for various sub-types. Assembly language is not written to be
understandable to the reader, but to the computer. (Although good
assembly language programmers can make assembly code
understandable)
--
Chuck F (cbfalconer at maineline dot net)
<http://cbfalconer.home.att.net>
Try the download section.
--
Posted via a free Usenet account from http://www.teranews.com ja*********@verizon.net wrote:
Kenneth Brody wrote:
>santosh wrote:
>
Benoit Lefebvre wrote:
On Dec 6, 4:55 pm, santosh <santosh....@gmail.comwrote: Benoit Lefebvre wrote:
Anyone have hints for me on how I can disassemble a binary
file using objdump, do some modifications and then recompile
everything ?
No. This cannot be done. Disassembly gives you assembler code which a C compiler cannot compile. Also often disassembly is very difficult to figure out and modifications might lead to errors. If source is not accessible and you must modify the binary then ask in a platform specific group. For example if you are disassembling x86 machine code ask in <news:comp.lang.asm.x86or <news:alt.lang.asm>.
And... can't an asm compiler recompile the code ?
Assuming the disassembler got everything correct, perhaps. But, I doubt that it would generate code that could be modified and then properly recompiled without considerable effort, in all but the simplest of programs.
Consider a simple disassembly of:
push 0x1234
Is "0x1234" a constant, or the address of a variable?
Correct me if I'm wrong; I've never used one - but wouldn't "push
0x1234" be the output from a disassember, rather than the input?
It is output. A disassembler often interprets the machine code literally
and thus can generate instructions that the original source did not
have. Additionally symbols and type information are likely to be lost.
The disassembly could even come out erroneously for a reasonably
complex program.
Just try to disassemble a hello world C++ program and assemble it back
to an executable in a suitable assembler (that understands the
disassembler's output syntax) and run it. Sometimes the reassembly will
fail, while often when it succeeds the program run erroneously.
The <news:alt.lang.asmand <news:comp.lang.asm.x86newsgroups have had
a lot of detailed discussions on disassembly and related topics. For
anyone interested (specifically the OP) a Google search of those groups
will be useful.
As this is totally OT to this group, I'll stop here.
<snip>
[snips]
On Fri, 07 Dec 2007 11:45:18 -0800, jameskuyper wrote:
>Consider a simple disassembly of:
push 0x1234
Is "0x1234" a constant, or the address of a variable?
Correct me if I'm wrong; I've never used one - but wouldn't "push
0x1234" be the output from a disassember, rather than the input?
I think he might have skipped some context. Consider two possible
disassemblies of the equivalent of a "Hello, world" program:
; Listing one
txt db 'Hello, world'
..main
load reg, offset_of txt
push reg
call .printf
; Listing two
txt db 'Hello, world'
..main
push 0x1234 ; address of 'Hello, world'
call 0x3917 ; address of printf
Each is a perfectly reasonable disassembling; one of 'em ain't gonna work
on re-assembling, unless every single byte is in exactly the right spot,
which even in assembly is not necessarily gonna happen, particularly if
the reason for disassembling was to fix/add/alter the code somehow.
Kenneth Brody wrote:
Consider a simple disassembly of:
push 0x1234
Is "0x1234" a constant, or the address of a variable?
The concepts of "address" and "constant",
aren't mutually exclusive.
N869
6.6 Constant expressions
[#9] An address constant is a null pointer, a pointer to an
lvalue designating an object of static storage duration, or
to a function designator;
--
pete
pete wrote:
>
Kenneth Brody wrote:
Consider a simple disassembly of:
push 0x1234
Is "0x1234" a constant, or the address of a variable?
The concepts of "address" and "constant",
aren't mutually exclusive.
N869
6.6 Constant expressions
[#9] An address constant is a null pointer, a pointer to an
lvalue designating an object of static storage duration, or
to a function designator;
However, in the OPs case of wanting to disassemble, modify,
reassemble, it makes a big difference. Consider:
foo(&x);
bar(0x1234);
If &x==0x1234, it is quite possible to see this as a disassembly:
push 0x1234
call foo
push 0x1234
call bar
--
+-------------------------+--------------------+-----------------------+
| Kenneth J. Brody | www.hvcomputer.com | #include |
| kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer.h|
+-------------------------+--------------------+-----------------------+
Don't e-mail me at: <mailto:Th*************@gmail.com> This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: edgrsprj |
last post by:
PROPOSED EARTHQUAKE FORECASTING
COMPUTER PROGRAM DEVELOPMENT EFFORT
Posted July 11, 2005
My main earthquake forecasting Web page is:...
|
by: nospam |
last post by:
Dear all,
I have written a C++ program 1.cpp
#include <stdioh>
main() {
}
then I compile with g++ 1.cpp, it generated a ./a.out.
|
by: Randy Yates |
last post by:
Hi,
I work in an embedded environment in which we often use a mix of C and
assembly code. Thus a recurring requirement is to be able to take a C...
|
by: noridotjabi |
last post by:
Two questions.
1)Is there any way that I can read from an executable and then execute
what I have read.
EXAMPLE:
text
text
this is more...
|
by: Dave |
last post by:
I want to create a program that can only be run by a user with administrator
privileges (ie in the BUILTIN/Administrators group - I think. Correct...
|
by: sunny |
last post by:
Hi All,
When objdump command is executed It has displayed so many
sections(segments) in the output
..data , .bss , .sbss , .rodata, .romdata,...
|
by: pingu219 |
last post by:
Hi I'm currently in the midst of building a C high-level refactoring
program in Java but I was wondering if there are any good parsers (or
some...
|
by: Horacius ReX |
last post by:
Hi,
I am developing some code in C which first I compile on my linux
machine and afterwards
I test on another special hardware which has almost...
|
by: Andrew D |
last post by:
I am creating a program that will be sold as a subscription. I am trying to decide how to prevent users from passing the program to others without...
|
by: better678 |
last post by:
Question:
Discuss your understanding of the Java platform. Is the statement "Java is interpreted" correct?
Answer:
Java is an object-oriented...
|
by: teenabhardwaj |
last post by:
How would one discover a valid source for learning news, comfort, and help for engineering designs? Covering through piles of books takes a lot of...
|
by: Kemmylinns12 |
last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
|
by: CD Tom |
last post by:
This only shows up in access runtime. When a user select a report from my report menu when they close the report they get a menu I've called Add-ins...
|
by: Naresh1 |
last post by:
What is WebLogic Admin Training?
WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
|
by: Matthew3360 |
last post by:
Hi there. I have been struggling to find out how to use a variable as my location in my header redirect function.
Here is my code.
...
|
by: Matthew3360 |
last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
|
by: WisdomUfot |
last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...
|
by: Matthew3360 |
last post by:
Hi,
I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web...
| |