Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions must demonstrate a minimal understanding of the problem being solved. Tell us what you've tried to do, why it didn't work, and how it should work. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
Once an exe is loaded in memory, is the content present in that exe file directly executed by the processor or the OS does it? I mean, is the binary present in exe simplified again by OS for machine level usage?
The .exe file contains op codes directly executable by the processor.
For a C++ program, the compiler produces a combination of data and code in the executable image. The OS loader arranges to put that into specific memory addresses in the program address space, then asks the CPU to call the code at known "entry point" (there may be such a pointer for each dynamically loaded library (.so / .dll) as well as the entry point for main(). The executable code produced by the compiler will target the CPU models on which the code may be run.
If an attempt is made to execute the code on another CPU architecture, it will generally fail, although it's possible for an OS to do whatever it likes including detect executables compiled for another CPU and put some kind of emulation or recompilation layer in place. This would be very much the exection though.
Related
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
After a lot of research i could not find any solution to my question (if i did i woudln't be here ...)
I'm looking for solutions that permits me to reduce the flash memory used by my program.
I'm programming an embedded c++ programm and when i Flash my electronic card in release mode everything is fine cause it doesn't overflow the space of the flash memory, but that is not the case when i do it in Debug mode... I want to know if it is possible to find functions (my goal is to do it without reducing the code) that could reduce Flash memory.I already thought about defragmentation but I don't find how to do it in embedded even though i don't even know if i can ... I also tried the -Os cmd from gcc but without any big success
So I'm taking any advices or support and i'll be there at any question about my issue ;)
Thanks !
Look at your map file. Is there something there you don't
expect? Functions you aren't expecting (like floating point, or
exception handling, etc.) or something unreasonably large?
Turn on optimization except for the file you're interested in.
Make sure you've actually got optimizations turned on (look at the build log and ensure that you've got -Os being passed to each compile step)
Consider link time optimizations, but don't expect miracles
Welcome to embedded programming. 90% of the job is figuring out how to stuff the never ending requirements into the memory available. Rinse and repeat.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
My application has a huge memory leak which eats all my memory instantly, and I can't debug as it freezes the computer ...
Do you guys have any technical solution for that kind of issue?
Edit : I am using Qt Creator with Windows 7 and MSVC compiler.
Cheers
You cannot just freeze a computer with a single instruction. If you allocate a lot of memory, it will either crash the program or use a virtual memory space without actually consuming the real space.
Thus, if you debug it further, maybe in smaller steps, I am sure you will find your solution.
There are many debugging tools that you can try to use, depending on your working environment. Assuming you are working under linux, the simplest one is the command line gdb, allowing you to execute code line-by-line. More advanced, tailored specifically to memory problems is valgrind.
In the comment you are asking if there is a way for the OS to artifically limit the available memory to a program/process. You can try by reading this question:
https://unix.stackexchange.com/questions/44985/limit-memory-usage-for-a-single-linux-process
however, given the little information you provided, I am not convinced it will solve your problem.
If you have got global variables which allocate memory immediately, i.e. before reaching the first line of code in main(), which could be found for instance in class constructors, then you may consider placing your breakpoints not on the first line of main() but rather on the class constructors. Just as a hint based on a previous similar experience ...
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I'm currently doing research about memory checking tools for Windows 7, MS Visual Studio C++. For tools which are free, or have demo available, I would like to run special test: run a simple application which would contain as many different memory errors as possible so I could check how many of them the tool can detect.
So I would like to ask whether there is available source code in C++ for such application.
Notes:
I Googled this thing, but all I could find are questions and sites about memory checking tools.
Of course I could write such app (and I will do it if there is no such code available), but I know I will probably forget some kinds of errors. For example I even didn't think about checking whether memcpy's parameters are overlapping (which is an error - use memmove instead, or revise the code) until valgrind found it in my personal project (in this case, I copied an array into multiple places and I forgot (in a loop) to omit the first (source) array). I believe there is much more error types I never thought about.
I cannot use valgrind as it MUST be Windows MS Visual C++ application, I cannot change this decision, and valgrind under Wine looks like too complicated so I probably won't be able to convince my colleagues to use this solution. And it's not even sure that Wine will run our app...
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I wrote a program that opens the exe files. I want that program to read some specific assembly instructions with their addresses in an exe file. for example JAM or Call.
so, what API functions should I use. if you know any other sources that can be useful tell me ;)
If you want to read code in a Windows PE file (Portable Executable) you will first have to find the code section.
How to find this depends whether the exe is a 32-bit or 64-bit one (although they're pretty much the same for their internal structure), but I recommend you studying the PE format: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx
After that you will have to find the address in which your call code or whatever you want resides. What do you want to do with that binary code is up to you, if you intend to translate it into asm human-readable code you will need a translator (or code one up by yourself... pretty hard for a beginner) such as distorm (GPL and commercial license).
I hope this got you started to what you want to do.
A very good start will be to use a disassembly library, Capstone is one of them for example but more exists.
Then you will need to parse the PE executable format to extract the code to send to your disassembly library...
But in that domain libraries also exists, for example radare supporting most architectures and format (And it can be used with multiple disassembly libraries, including Capstone)
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
I have some very specific questions about writing operating systems that I was hoping could get answered:
How much assembly code would I need to write to load a minimal C Kernel if I use GRUB as a boot loader?
My kernel will be written in C, It will load a command line shell that I wrote in C++, it does not make any API calls only standard library calls, will I need to rewrite the entire C++ Standard library to do so?
Can I write video, keyboard and floppy drivers in C++?
Do GCC and G++ output 16 bit real mode code?
Can I write this all using Mingw on Windows or will I have to write it on Linux?
Do I need to be in real mode in order to write directly to the video memory?
If anyone can answer my questions I will be very thankful
1: You should only need a small amount of assembly to handle the boot process and load the C code. Shouldn't be more than like 20-30 lines I think.
2-4: I haven't really used C++ with OS dev, but I think I remember reading that it takes more work to get it running somewhere. Sorry I can't be of more help.
5: You "can" do it using MinGW, but from my experience it mostly complicates things. I could never really get a Windows environment working, but I also gave up without too much effort.
EDIT: Here is a link to some example assembly. This is all I ever had to use:
http://www.jamesmolloy.co.uk/tutorial_html/2.-Genesis.html
The rest of that site is a pretty good tutorial too if you are at all interested in that kind of thing.