Ok so been trying Google but been unable to find anything helpful.
My question is this if you have a program and you wanted to add a feature?
How would you do that?
My idea is that you would need to reverse the original .exe\ .dll file to load your code as its own. And thus giving you a extra menu in the appliaction.
Anyone have a idea on how to do this, or preferably have a link to some Tutorials or books this would be great.
According to me, I can design your system which is possible to plugin.
To easily understand, I'll give an example as below.
ex: My application is to load an image from HDD and display it on screen. We have a lot of image type, such as bimap, jpg, gif, ... We must spend many time for implementing all. Therefore, the first, we only care an image type and another image type will be implemented and added into system later.
We divide system into 2 parts: Main system and plugins package (Dll).
- Bimap dll (a plugin package): We will create a dll project to export an interface include some necessary methods as LoadImage, ....
- Main system: before running, we'll check and load all of DLL files in a specify folder via. To load a bitmap image, We only call LoadImage method via interface.
Later, when we want to support more picture, we only create new dll project and export an appropriate interface.
In my experience the most common need to "add functionality" to a program arises from office type applications and both MS and Libre office allow third party add-on's. As does Blender, Maya, Cinima4D, Unity and a whole list of other rendering suites. You may or may not be able to write them directly in C\C++ but loading a DLL with most scripting languages is pretty simple, I'm not so sure about .SO's though since I'm not a *nix guy.
modoran is correct I was wondering about 3rd party applications.
@amhndu: I am aver of the need for debuggers and so on, and if you have any info or documentation\ tutorials about this. I would appreciate some links or books as I am interesting in studding this.
If you are wondering way, I always wanted to be able to improve applications.
@ OP: Like I said in my post, a lot of applications have a method for you to "add functionality". Just like Web browsers allow plug-ins, a lot of other applications allow something similar. What product are you looking to "improve"?
I think the experts will have to confirm this but it sounds like "code injection" is what you're looking for. If you can get the application to run your code then you can subclass any of its windows and add additional functionality.
In theory, if you can find an uncovered leak that would cause the application to feed a random (editable) instruction set to the CPU, you could write anything in there, which would be a shortcut to having the application to do anything you want. But that's just shooting in the dark.