<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEQHSHk-eip7ImA9WhVSFE8.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056</id><updated>2012-03-11T02:32:19.752+03:00</updated><category term="export table" /><category term="obfuscation" /><category term="API export" /><category term="software protection" /><category term="trolls" /><category term="device drivers" /><category term="memory dump" /><category term="dynamic encryption" /><category term="forums" /><category term="system internals" /><category term="dump" /><category term="signal" /><category term="trolling" /><category term="structured exception handling" /><category term="encryption" /><category term="system prorgamming" /><category term="fake dll" /><category term="exception handling" /><category term="protectors" /><category term="advanced programming technique" /><category term="virtual machine" /><category term="macro" /><category term="code obfuscation" /><category term="code injection" /><category term="reverse" /><category term="64 bit" /><category term="system call" /><category term="linux" /><category term="artificial neural network" /><category term="enumerate threads" /><category term="misc_register" /><category term="sigaction" /><category term="programming" /><category term="shared object" /><category term="misc_unregister" /><category term="information" /><category term="ann" /><category term="kernel module" /><category term="windows internals" /><category term="newsgroups" /><category term="miscellaneous character driver" /><category term="low level development" /><category term="vectored exception handling" /><category term="anti piracy" /><category term="kernel" /><category term="EnumProcessModules" /><category term="flat assembler" /><category term="suspend thread" /><category term="API import" /><category term="assembly language" /><category term="dll injection" /><category term="packers" /><category term="sys_call_table" /><title>System Programming</title><subtitle type="html">This blog is dedicated to low level programming in Assembler and C/C++ (although, C++ is unwelcome) in either *Nix or Windows based operating systems.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://syprog.blogspot.com/" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/JckOd" /><feedburner:info uri="blogspot/jckod" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkAFR30zeSp7ImA9WhVSEEg.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-854000350051437736</id><published>2012-03-06T21:31:00.000+03:00</published><updated>2012-03-06T21:31:56.381+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-06T21:31:56.381+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fake dll" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="export table" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="dll injection" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="API import" /><category scheme="http://www.blogger.com/atom/ns#" term="system internals" /><category scheme="http://www.blogger.com/atom/ns#" term="API export" /><title>Faking KERNEL32.DLL - an Amateur Sandbox</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/854000350051437736/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2012/03/faking-kernel32dll-amateur-sandbox.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/854000350051437736?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/854000350051437736?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/AjrpUWWx8Do/faking-kernel32dll-amateur-sandbox.html" title="Faking KERNEL32.DLL - an Amateur Sandbox" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-AycR9WxfFTQ/T1ZVOaqYdLI/AAAAAAAAD6o/PqppQpkQR5Q/s72-c/fake.png" height="72" width="72" /><thr:total>4</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yRIhRKCSVwPI_HFTw-f_E1eDZXM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yRIhRKCSVwPI_HFTw-f_E1eDZXM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yRIhRKCSVwPI_HFTw-f_E1eDZXM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yRIhRKCSVwPI_HFTw-f_E1eDZXM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

As a part of my work (read "fun") of maintaining this blog, I am constantly checking the statistic information on traffic sources and keywords (it's nice to know that people are getting here via Google) in order to see whether my readers are getting what they are looking for (personally, I see no reason in simply "streaming my consciousness to the masses" as this is not the point of this blog).&lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/AjrpUWWx8Do" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2012/03/faking-kernel32dll-amateur-sandbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UDRXY5cCp7ImA9WhVTGEo.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-4127750591142619571</id><published>2012-03-04T19:41:00.000+03:00</published><updated>2012-03-04T19:41:14.828+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-04T19:41:14.828+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="flat assembler" /><category scheme="http://www.blogger.com/atom/ns#" term="artificial neural network" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="information" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="64 bit" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="ann" /><title>Trivial Artificial Neural Network in Assembly Language</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/4127750591142619571/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2012/03/trivial-artificial-neural-network-in.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/4127750591142619571?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/4127750591142619571?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/XXps5LbUZ5Y/trivial-artificial-neural-network-in.html" title="Trivial Artificial Neural Network in Assembly Language" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-clZ6kGASjig/T1N4L7ndyWI/AAAAAAAAD6A/nz7KDcVtwO4/s72-c/linked_list.png" height="72" width="72" /><thr:total>5</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e-I4vOiQq0t1HFcNjJ0LUlEM2hI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e-I4vOiQq0t1HFcNjJ0LUlEM2hI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e-I4vOiQq0t1HFcNjJ0LUlEM2hI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e-I4vOiQq0t1HFcNjJ0LUlEM2hI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
Source code for this article may be found here.


Note for nerds: The code shown in this article may be incomplete and may not contain all the security checks you would usually perform in your code as it is given here for demonstration purposes only. Downloadable source code may contain bugs (there is no software without bugs at all). It is provided as is without any warranty. You may use and &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/XXps5LbUZ5Y" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2012/03/trivial-artificial-neural-network-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4EQ3k4fip7ImA9WhVTFkQ.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-2606748251413121408</id><published>2012-03-02T17:35:00.000+03:00</published><updated>2012-03-02T17:35:02.736+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-02T17:35:02.736+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reverse" /><category scheme="http://www.blogger.com/atom/ns#" term="suspend thread" /><category scheme="http://www.blogger.com/atom/ns#" term="packers" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="memory dump" /><category scheme="http://www.blogger.com/atom/ns#" term="dump" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="code injection" /><category scheme="http://www.blogger.com/atom/ns#" term="protectors" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="information" /><category scheme="http://www.blogger.com/atom/ns#" term="enumerate threads" /><title>Defeating Packers for Static Analysis of Malicious Code</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/2606748251413121408/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2012/03/defeating-packers-for-static-analysis.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2606748251413121408?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2606748251413121408?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/RbFNfSUstGI/defeating-packers-for-static-analysis.html" title="Defeating Packers for Static Analysis of Malicious Code" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>4</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c6qujXGYOaY2M02FHyHGiW0tc4s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c6qujXGYOaY2M02FHyHGiW0tc4s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c6qujXGYOaY2M02FHyHGiW0tc4s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c6qujXGYOaY2M02FHyHGiW0tc4s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

I doubt whether there is anybody in either AV industry or among reverse engineers who does not know what a software packer is (for those who don't - this article may help). Malware research and reverse engineering forums are full of packers' related questions, descriptions thereof, unpacking suggestions and links to both packers and unpackers. In short - people have been doing a lot of precious&lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/RbFNfSUstGI" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2012/03/defeating-packers-for-static-analysis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcBRng6cCp7ImA9WhVTGUg.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-1332944228832664834</id><published>2012-03-02T00:01:00.000+03:00</published><updated>2012-03-05T17:17:37.618+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-05T17:17:37.618+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software protection" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="anti piracy" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="obfuscation" /><category scheme="http://www.blogger.com/atom/ns#" term="encryption" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="dynamic encryption" /><category scheme="http://www.blogger.com/atom/ns#" term="code obfuscation" /><title>Dynamic Code Encryption as an Anti Dump and Anti Reverse Engineering measure</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/1332944228832664834/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2012/03/dynamic-code-encryption-as-anti-dump.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1332944228832664834?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1332944228832664834?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/Iv_5i57t9HE/dynamic-code-encryption-as-anti-dump.html" title="Dynamic Code Encryption as an Anti Dump and Anti Reverse Engineering measure" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-XQqB86VU7RI/T0--jOpgLhI/AAAAAAAAD54/i4eo4_ubaMw/s72-c/encrypted.png" height="72" width="72" /><thr:total>2</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n92_9M894qVtrLZDgBYmQUw6jYY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n92_9M894qVtrLZDgBYmQUw6jYY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n92_9M894qVtrLZDgBYmQUw6jYY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n92_9M894qVtrLZDgBYmQUw6jYY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

Source code for this article may be found here.


There has been said and written too much on how software vendors do not protect their products, so let me skip this. Instead, in this article, I would like to concentrate on those relatively easy steps, which software vendors have to take in order to enhance their protection (using packers and protectors is good, but certainly not enough) by not&lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/Iv_5i57t9HE" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2012/03/dynamic-code-encryption-as-anti-dump.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQEQH88fip7ImA9WhVTFUk.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-642362464048843815</id><published>2012-02-29T22:05:00.000+03:00</published><updated>2012-02-29T22:05:01.176+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T22:05:01.176+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="exception handling" /><category scheme="http://www.blogger.com/atom/ns#" term="vectored exception handling" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="signal" /><category scheme="http://www.blogger.com/atom/ns#" term="system internals" /><category scheme="http://www.blogger.com/atom/ns#" term="sigaction" /><title>Vectored Exception Handling for Linux</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/642362464048843815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2012/02/vectored-exception-handling-for-linux.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/642362464048843815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/642362464048843815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/eNWAuiW2Fb0/vectored-exception-handling-for-linux.html" title="Vectored Exception Handling for Linux" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-2pqhr7w3ZW0/T05cmsDrdFI/AAAAAAAAD5I/h11sbXpDkW8/s72-c/veh_h_1.png" height="72" width="72" /><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/izGUJ3ZB9SOzW22leevQrN_0a9I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/izGUJ3ZB9SOzW22leevQrN_0a9I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/izGUJ3ZB9SOzW22leevQrN_0a9I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/izGUJ3ZB9SOzW22leevQrN_0a9I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

Source code for this article may be found here.





The title of this article may look weird. In deed, why would someone want to use Vectored Exception Handling in Linux, while this OS provides a perfectly working mechanism - signals? Well, there are several possible answers:


Many programmers, who started their career with Windows programming, are getting a bit frustrated when it comes to &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/eNWAuiW2Fb0" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2012/02/vectored-exception-handling-for-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEGRn88fSp7ImA9WhVTFU8.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-2345998786235988403</id><published>2012-02-27T18:42:00.000+03:00</published><updated>2012-02-29T16:37:07.175+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T16:37:07.175+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software protection" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="anti piracy" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="code obfuscation" /><title>Basics of Executable Code Obfuscation</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/2345998786235988403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2012/02/basics-of-executable-code-obfuscation.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2345998786235988403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2345998786235988403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/-5ZaNOUDnr0/basics-of-executable-code-obfuscation.html" title="Basics of Executable Code Obfuscation" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Ayv7h-GgE9g/T0uImMgBjXI/AAAAAAAAD34/-jZ4XeYHXu0/s72-c/obfuscated_main.png" height="72" width="72" /><thr:total>5</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ti4mtPE47yXgTd93IRQB_nLWJNI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ti4mtPE47yXgTd93IRQB_nLWJNI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ti4mtPE47yXgTd93IRQB_nLWJNI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ti4mtPE47yXgTd93IRQB_nLWJNI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

Source code for this article may be found here.


The problem of software security has already been raised in my previous articles more that once. This article is not an exception. 



Majority of software vendors position themselves as number one in the industry, even though there are always more then 1 number 1. But what unites them all (well, almost all) in reality, it the fact that they all&lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/-5ZaNOUDnr0" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2012/02/basics-of-executable-code-obfuscation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcGSH87fyp7ImA9WhRXF0s.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-2175929236870449590</id><published>2011-12-25T01:50:00.000+03:00</published><updated>2011-12-25T01:50:29.107+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T01:50:29.107+03:00</app:edited><title>Merry Christmas!</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/2175929236870449590/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/12/merry-christmas.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2175929236870449590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2175929236870449590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/4R0rpVQ_7ao/merry-christmas.html" title="Merry Christmas!" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IcghhRP5RdayOQqbPqhVj6VZGJM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IcghhRP5RdayOQqbPqhVj6VZGJM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IcghhRP5RdayOQqbPqhVj6VZGJM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IcghhRP5RdayOQqbPqhVj6VZGJM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;


&lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/4R0rpVQ_7ao" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/12/merry-christmas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YGQncyeSp7ImA9WhRXGEw.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-4385184818371876682</id><published>2011-12-22T01:16:00.000+03:00</published><updated>2011-12-25T16:18:43.991+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T16:18:43.991+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software protection" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="flat assembler" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="virtual machine" /><title>Simple Virtual Machine</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/4385184818371876682/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/12/simple-virtual-machine.html#comment-form" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/4385184818371876682?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/4385184818371876682?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/vu8kFjr4z0Q/simple-virtual-machine.html" title="Simple Virtual Machine" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-gp-xYz1uOt8/TvMxvzzCZYI/AAAAAAAAD2M/l7zfIVE5iJk/s72-c/asm_constants.png" height="72" width="72" /><thr:total>13</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fna0ZV0u9VSq6rcznzZ7_lZw69Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fna0ZV0u9VSq6rcznzZ7_lZw69Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fna0ZV0u9VSq6rcznzZ7_lZw69Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fna0ZV0u9VSq6rcznzZ7_lZw69Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

Sample code for this article may be found here.

In computing, Virtual Machine (VM) is a software implementation of either existing or a fictional hardware platform.  VM's are generally divided into two classes - system VM (VM which is capable of running an operating system) and process VM (the one that only can run one executable, roughly saying). Anyway, if you are just interested in the &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/vu8kFjr4z0Q" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/12/simple-virtual-machine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cGRXc5cCp7ImA9WhRXE08.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-1551666526496328776</id><published>2011-12-19T21:57:00.000+03:00</published><updated>2011-12-19T21:57:04.928+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-19T21:57:04.928+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="EnumProcessModules" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="shared object" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="information" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="system internals" /><title>Listing Loaded Shared Objects in Linux</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/1551666526496328776/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/12/listing-loaded-shared-objects-in-linux.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1551666526496328776?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1551666526496328776?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/H6P7ZZrOfc4/listing-loaded-shared-objects-in-linux.html" title="Listing Loaded Shared Objects in Linux" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>4</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KOAX-zPNVEHi6Gu_4GdRNP-31N4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KOAX-zPNVEHi6Gu_4GdRNP-31N4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KOAX-zPNVEHi6Gu_4GdRNP-31N4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KOAX-zPNVEHi6Gu_4GdRNP-31N4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
I have recently come across several posts on the Internet where guys keep asking for Linux analogs of Windows API. One of the most frequent one is something like "EnumProcessModules for Linux". As usual, most of the replies are looking like "why do you need that?" or "Linux is not Windows". Although, the last one is totally true, it is completely useless. As to "why do you need that?" - why do &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/H6P7ZZrOfc4" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/12/listing-loaded-shared-objects-in-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08ASH45cSp7ImA9WhRXEU0.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-8157141856964186563</id><published>2011-12-16T00:50:00.001+03:00</published><updated>2011-12-17T10:10:49.029+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-17T10:10:49.029+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software protection" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="dll injection" /><category scheme="http://www.blogger.com/atom/ns#" term="code injection" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="obfuscation" /><category scheme="http://www.blogger.com/atom/ns#" term="information" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><title>Executable Code Injection the Interesting Way</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/8157141856964186563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/12/executable-code-injection-interesting.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/8157141856964186563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/8157141856964186563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/7EAoOnSoFCc/executable-code-injection-interesting.html" title="Executable Code Injection the Interesting Way" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-mg73EFXYw-o/TupT2pPzgtI/AAAAAAAAD1E/svIqftxd3CE/s72-c/layout.png" height="72" width="72" /><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jlJYu8SDvXeBo0Uqu9d9rDgj-gM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jlJYu8SDvXeBo0Uqu9d9rDgj-gM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jlJYu8SDvXeBo0Uqu9d9rDgj-gM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jlJYu8SDvXeBo0Uqu9d9rDgj-gM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

So. Executable code injection. In general, this term is associated with malicious intent. It is true in many cases, but in, at least, as many, it is not. Being malware researcher for the most of my career, I can assure you, that this technique appears to be very useful when researching malicious software, as it allows (in most cases) to defeat its protection and gather much of the needed &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/7EAoOnSoFCc" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/12/executable-code-injection-interesting.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ADSX0yeyp7ImA9WhRQFkw.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-5680071543796506957</id><published>2011-12-11T18:21:00.001+03:00</published><updated>2011-12-11T19:09:38.393+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-11T19:09:38.393+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="trolling" /><category scheme="http://www.blogger.com/atom/ns#" term="forums" /><category scheme="http://www.blogger.com/atom/ns#" term="trolls" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="newsgroups" /><category scheme="http://www.blogger.com/atom/ns#" term="information" /><title>Pseudo Experts or Who's the Troll</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/5680071543796506957/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/12/pseudo-experts-or-whos-troll.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/5680071543796506957?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/5680071543796506957?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/zjBURcFnH3M/pseudo-experts-or-whos-troll.html" title="Pseudo Experts or Who's the Troll" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>1</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gubFZ0HOPQoP6Gm7FlY-De_iAhI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gubFZ0HOPQoP6Gm7FlY-De_iAhI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gubFZ0HOPQoP6Gm7FlY-De_iAhI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gubFZ0HOPQoP6Gm7FlY-De_iAhI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
Internet has currently become the most available source of consultation and tutorials then anything else. At least, because the closest library is a couple of blocks away while the Internet is at your fingertips (wanted to say "at your desk", but it may be a laptop or a mobile device). It is hard to find someone who hasn't ever posted a question or an issue on one of the numerous forums or &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/zjBURcFnH3M" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/12/pseudo-experts-or-whos-troll.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYFRX8-eCp7ImA9WhRQFE4.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-1524152295685494437</id><published>2011-12-09T14:20:00.001+03:00</published><updated>2011-12-09T14:28:34.150+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-09T14:28:34.150+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="flat assembler" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="API import" /><category scheme="http://www.blogger.com/atom/ns#" term="macro" /><category scheme="http://www.blogger.com/atom/ns#" term="system internals" /><category scheme="http://www.blogger.com/atom/ns#" term="API export" /><title>Flat Assembler "Export" Macro with Custom Ordinal Base</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/1524152295685494437/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/12/flat-assembler-export-macro-with-custom.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1524152295685494437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1524152295685494437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/y9sfrkq_yio/flat-assembler-export-macro-with-custom.html" title="Flat Assembler &quot;Export&quot; Macro with Custom Ordinal Base" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZVgkEHaNz_tcaveej2aRRxOBYUQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZVgkEHaNz_tcaveej2aRRxOBYUQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZVgkEHaNz_tcaveej2aRRxOBYUQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZVgkEHaNz_tcaveej2aRRxOBYUQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
I have recently come across the need to build dynamic link libraries with custom ordinal base (different from 1). After searching the net and seeing lots of people writing their own export macros, I came to a conclusion that Occam's Razor principle still works here and decided to make simple modifications to the original export macro provided with FASM package. The modifications are marked with &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/y9sfrkq_yio" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/12/flat-assembler-export-macro-with-custom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcFRXg_fip7ImA9WhRQFEk.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-2974392427512464146</id><published>2011-12-08T18:03:00.001+03:00</published><updated>2011-12-09T18:03:34.646+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-09T18:03:34.646+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software protection" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="dll injection" /><category scheme="http://www.blogger.com/atom/ns#" term="obfuscation" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><title>Hiding Injected DLL in Windows</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/2974392427512464146/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/12/hiding-injected-dll-in-windows.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2974392427512464146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/2974392427512464146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/j7HYcVoxuZI/hiding-injected-dll-in-windows.html" title="Hiding Injected DLL in Windows" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>4</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5PbIjJAyyrZGuCH5-iehR3TJPN0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5PbIjJAyyrZGuCH5-iehR3TJPN0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5PbIjJAyyrZGuCH5-iehR3TJPN0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5PbIjJAyyrZGuCH5-iehR3TJPN0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

Errare humanum est... For some reasons, I have missed an important aspect of DLL injection in my previous article. Namely - hiding your injected DLL. It may be unnecessary when you inject DLL into your own process (e.g. for debugging purposes), but what if you are a tough malware researcher trying to trace the activity of some bad executable? In such case, the less you inform the malware you &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/j7HYcVoxuZI" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/12/hiding-injected-dll-in-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYERHc5cSp7ImA9WhRRGEs.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-1146937172178135962</id><published>2011-11-26T19:03:00.001+03:00</published><updated>2011-12-03T00:58:25.929+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-03T00:58:25.929+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software protection" /><category scheme="http://www.blogger.com/atom/ns#" term="advanced programming technique" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="dll injection" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="API import" /><category scheme="http://www.blogger.com/atom/ns#" term="system internals" /><title>Advanced DLL Injection</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/1146937172178135962/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/11/advanced-dll-injection.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1146937172178135962?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/1146937172178135962?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/3ZmlD92GrJk/advanced-dll-injection.html" title="Advanced DLL Injection" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>2</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s9xinvYuHe-N1FGVWylvvTYCgpE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s9xinvYuHe-N1FGVWylvvTYCgpE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/s9xinvYuHe-N1FGVWylvvTYCgpE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s9xinvYuHe-N1FGVWylvvTYCgpE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

It has been a while since my last article. Special thanks to those who decided to stay with me despite the long break and welcome to new readers!



In this article I am going to cover such a trivial (as it may seem) subject as DLL injection. For some reason, most of the tutorials on the web only give us a brief coverage of the topic, mostly limited to invocation of LoadLibraryA/W Windows API &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/3ZmlD92GrJk" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/11/advanced-dll-injection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUHQ3k6fyp7ImA9WhdbFU8.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-677072035546373483</id><published>2011-10-13T19:10:00.000+03:00</published><updated>2011-10-13T19:10:32.717+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-13T19:10:32.717+03:00</app:edited><title>Dennis Ritchie, R.I.P.</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/677072035546373483/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/10/dennis-ritchie-rip.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/677072035546373483?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/677072035546373483?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/YDJYJWDroFc/dennis-ritchie-rip.html" title="Dennis Ritchie, R.I.P." /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-jvuQrYTinns/TpcNDhMc9sI/AAAAAAAAD0U/7D71Kaq4-J8/s72-c/black.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YULgzW6bTMdzecU_DKvtq1AOcTY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YULgzW6bTMdzecU_DKvtq1AOcTY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YULgzW6bTMdzecU_DKvtq1AOcTY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YULgzW6bTMdzecU_DKvtq1AOcTY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;


Dennis Ritchie, the father of C language and co-creator of Unix has passed away this week...&lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/YDJYJWDroFc" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/10/dennis-ritchie-rip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QMSX0yfip7ImA9WhdbFEQ.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-8926091510530001917</id><published>2011-10-13T12:49:00.000+03:00</published><updated>2011-10-13T12:49:48.396+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-13T12:49:48.396+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kernel module" /><category scheme="http://www.blogger.com/atom/ns#" term="system call" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="misc_unregister" /><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="sys_call_table" /><category scheme="http://www.blogger.com/atom/ns#" term="system internals" /><category scheme="http://www.blogger.com/atom/ns#" term="miscellaneous character driver" /><category scheme="http://www.blogger.com/atom/ns#" term="misc_register" /><category scheme="http://www.blogger.com/atom/ns#" term="device drivers" /><title>Hijack Linux System Calls: Part III. System Call Table</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/8926091510530001917/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/10/hijack-linux-system-calls-part-iii.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/8926091510530001917?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/8926091510530001917?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/T_EE93ggnLE/hijack-linux-system-calls-part-iii.html" title="Hijack Linux System Calls: Part III. System Call Table" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cZ4XUmPgz3m7tV6BFfTRGkpRHps/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cZ4XUmPgz3m7tV6BFfTRGkpRHps/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cZ4XUmPgz3m7tV6BFfTRGkpRHps/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cZ4XUmPgz3m7tV6BFfTRGkpRHps/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

This is the last part of the Hijack Linux System Calls series. By now, we have created a simple loadable kernel module which registers a miscellaneous character device. This means, that we have everything we need in order to patch the system call table. Almost everything, to be honest. We still have to fill the our_ioctl function and add a couple of declarations to our source file. By the end &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/T_EE93ggnLE" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/10/hijack-linux-system-calls-part-iii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUNSHk-eCp7ImA9WhdbFEQ.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-3858175144584554432</id><published>2011-10-12T21:00:00.001+03:00</published><updated>2011-10-13T12:31:39.750+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-13T12:31:39.750+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kernel module" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="misc_unregister" /><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="miscellaneous character driver" /><category scheme="http://www.blogger.com/atom/ns#" term="misc_register" /><category scheme="http://www.blogger.com/atom/ns#" term="device drivers" /><title>Hijack Linux System Calls: Part II. Miscellaneous Character Drivers</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/3858175144584554432/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/10/hijack-linux-system-calls-part-ii.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/3858175144584554432?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/3858175144584554432?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/RKxm1faR__E/hijack-linux-system-calls-part-ii.html" title="Hijack Linux System Calls: Part II. Miscellaneous Character Drivers" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>2</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Rq3o5hdgfBLdl5lMhNejDQ5eA5I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rq3o5hdgfBLdl5lMhNejDQ5eA5I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Rq3o5hdgfBLdl5lMhNejDQ5eA5I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rq3o5hdgfBLdl5lMhNejDQ5eA5I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

We all know what device drivers are - the hands of the operating system that make it possible for the kernel to handle hardware.  We also know that there are two types of devices  - character and block, depending on the way they handle data transmissions, but what does "miscellaneous" device mean? To put it simple - it means what it means. On one hand, this may be a driver that handles simple &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/RKxm1faR__E" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/10/hijack-linux-system-calls-part-ii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EGQ38_cCp7ImA9WhVTFkQ.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-6874872709802115144</id><published>2011-10-12T03:38:00.001+03:00</published><updated>2012-03-02T15:33:42.148+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-02T15:33:42.148+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kernel module" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="system internals" /><title>Hijack Linux System Calls: Part I. Modules</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/6874872709802115144/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/10/hijack-linux-system-calls-part-i.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/6874872709802115144?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/6874872709802115144?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/gzO27l50Iqs/hijack-linux-system-calls-part-i.html" title="Hijack Linux System Calls: Part I. Modules" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>6</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MegFIClWyUfHbbYcqtgfj3cnYd8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MegFIClWyUfHbbYcqtgfj3cnYd8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MegFIClWyUfHbbYcqtgfj3cnYd8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MegFIClWyUfHbbYcqtgfj3cnYd8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

Have you ever tried to google for "patching Linux system call table"? There are hundreds, if not thousands, of posts regarding this problem. Most of them are outdated, as they refer to older kernels (those, that still exported sys_call_table), others are about adding custom system call and recompiling the kernel. There are a few covering modern kernels, but those are brief and, mostly, only &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/gzO27l50Iqs" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/10/hijack-linux-system-calls-part-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8NQHs6eCp7ImA9WhdbEUU.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-5742245871440908053</id><published>2011-10-09T00:53:00.000+03:00</published><updated>2011-10-09T20:54:51.510+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-09T20:54:51.510+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="exception handling" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="signal" /><category scheme="http://www.blogger.com/atom/ns#" term="sigaction" /><title>Interfacing Linux Signals</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/5742245871440908053/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/10/iterfacing-linux-signals.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/5742245871440908053?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/5742245871440908053?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/oIKfujtCMnM/iterfacing-linux-signals.html" title="Interfacing Linux Signals" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-tH9lEAMCb6U/TpCr7IrmJqI/AAAAAAAAD0I/V8D9I9W733I/s72-c/encoded.png" height="72" width="72" /><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mJGiBQYEgTfoNDToyJmFw0v68Bo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mJGiBQYEgTfoNDToyJmFw0v68Bo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mJGiBQYEgTfoNDToyJmFw0v68Bo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mJGiBQYEgTfoNDToyJmFw0v68Bo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;

NOTE: All information provided here is related to x86 and IA64 and may be incorrect in regard of other platforms. More than that, it may not be the same on every x86/IA64, so check your kernel/libc sources first.

All source file paths are relative to your Linux Kernel source directory (most probably "/usr/src/linux") unless it is mentioned otherwise.

Sample code for this article may be &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/oIKfujtCMnM" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/10/iterfacing-linux-signals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EHRH85fSp7ImA9WhdUF04.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-5634614932261014601</id><published>2011-10-04T17:47:00.000+03:00</published><updated>2011-10-04T17:47:15.125+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T17:47:15.125+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software protection" /><category scheme="http://www.blogger.com/atom/ns#" term="export table" /><category scheme="http://www.blogger.com/atom/ns#" term="windows internals" /><category scheme="http://www.blogger.com/atom/ns#" term="obfuscation" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="API import" /><title>Stealth Import of Windows API</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/5634614932261014601/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/10/stealth-import-of-windows-api.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/5634614932261014601?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/5634614932261014601?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/ANE-fkbWI_E/stealth-import-of-windows-api.html" title="Stealth Import of Windows API" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>9</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ilvtNndmZ6DYlVDmM9gC9E-AxTg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ilvtNndmZ6DYlVDmM9gC9E-AxTg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ilvtNndmZ6DYlVDmM9gC9E-AxTg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ilvtNndmZ6DYlVDmM9gC9E-AxTg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;At good old times, memory was an expensive resource and developers had to take care of the size of the programs they create. Imagine how hard they had to work before there were high level languages (like C), before compilers became smart enough to handle all size optimization issues. Speed was also among the concerns, as the hardware was not as fast as it is now. Another headache was the need to &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/ANE-fkbWI_E" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/10/stealth-import-of-windows-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIGRn88cCp7ImA9WhdUF0w.&quot;"><id>tag:blogger.com,1999:blog-650001352631255056.post-8940371931467676839</id><published>2011-10-04T03:44:00.002+03:00</published><updated>2011-10-04T11:22:07.178+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T11:22:07.178+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="exception handling" /><category scheme="http://www.blogger.com/atom/ns#" term="vectored exception handling" /><category scheme="http://www.blogger.com/atom/ns#" term="system prorgamming" /><category scheme="http://www.blogger.com/atom/ns#" term="assembly language" /><category scheme="http://www.blogger.com/atom/ns#" term="low level development" /><category scheme="http://www.blogger.com/atom/ns#" term="structured exception handling" /><title>Windows Structured and Vectored Exception Handling Mechanisms</title><link rel="replies" type="application/atom+xml" href="http://syprog.blogspot.com/feeds/8940371931467676839/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://syprog.blogspot.com/2011/10/windows-structured-and-vectored.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/8940371931467676839?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/650001352631255056/posts/default/8940371931467676839?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/JckOd/~3/T7H-HOuHc4M/windows-structured-and-vectored.html" title="Windows Structured and Vectored Exception Handling Mechanisms" /><author><name>Alexey Lyashko</name><uri>https://profiles.google.com/108493326751983936020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-stmOhcUNBY8/AAAAAAAAAAI/AAAAAAAAD2A/L84u6CxSFkI/s512-c/photo.jpg" /></author><thr:total>0</thr:total><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o2b7CY9XNoNJ7NEgSaYlMNHd6cM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o2b7CY9XNoNJ7NEgSaYlMNHd6cM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o2b7CY9XNoNJ7NEgSaYlMNHd6cM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o2b7CY9XNoNJ7NEgSaYlMNHd6cM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;We are all familiar with try - except constructs from C++ (or Java, etc.) code and we all know what this construct is used for. However, I will try to take us deeper into the exception handling mechanism in this post.


Structured Exception Handling aka SEH
The MSDN definition of SEH is "Structured exception handling is a mechanism for handling both hardware and software exceptions. Therefore, &lt;img src="http://feeds.feedburner.com/~r/blogspot/JckOd/~4/T7H-HOuHc4M" height="1" width="1"/&gt;</content><feedburner:origLink>http://syprog.blogspot.com/2011/10/windows-structured-and-vectored.html</feedburner:origLink></entry></feed>

