{"id":24,"date":"2005-01-16T23:31:16","date_gmt":"2005-01-17T06:31:16","guid":{"rendered":"\/?p=24"},"modified":"2006-02-21T06:34:47","modified_gmt":"2006-02-21T14:34:47","slug":"building-up-trees","status":"publish","type":"post","link":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/","title":{"rendered":"Seeing The Forest For The Call Trees"},"content":{"rendered":"<p>Since Microsoft was kind enough to freely release certain of their multimedia libraries with extensive symbolic information, I thought I would go one step further and start extracting useful intelligence from the libraries in a methodical manner. To that end, I wrote a Perl script that analyzes the disassembly output of a &#8220;dumpbin.exe \/disasm &lt;file&gt;&#8221; command (standard with the Microsoft development tools) and outputs a list of all the functions in the file as well as all the functions the function calls. The list is divided into functions that are not called within the code (these are suspected to be top-level functions) and functions that are referenced.<\/p>\n<p><!--more--><\/p>\n<p><a href=\"\/pre\/gen-calltree-dumpbin.txt\">This is the Perl script in question, gen-calltree-dumpbin.pl.<\/a> Now that I have composed this tool, I fully recognize that many folks will write in and tell me about standard and much better tools for accomplishing the same task. In any case, I have hosted the output data from several different multimedia-related files from the WinCE toolkit in the <a href=\"\/pre\/\">Practical Reverse Engineering<\/a> section of this site:<\/p>\n<table>\n<tr>\n<td>\n<ul>\n<li><a HREF=\"\/pre\/cedrm.tree.txt\">cedrm.lib<\/a><\/li>\n<li><a HREF=\"\/pre\/cedrm2.tree.txt\">cedrm2.lib<\/a><\/li>\n<li><a HREF=\"\/pre\/cinepak.tree.txt\">iccvid.lib (Cinepak)<\/a><\/li>\n<li><a HREF=\"\/pre\/drmutils.tree.txt\">drmutils.lib<\/a><\/li>\n<li><a HREF=\"\/pre\/dvdnav.tree.txt\">dvdnav.lib<\/a><\/li>\n<\/ul>\n<\/td>\n<td>\n<ul>\n<li><a HREF=\"\/pre\/janusdrm.tree.txt\">janusdrm.lib<\/a><\/li>\n<li><a HREF=\"\/pre\/janusdrmila.tree.txt\">janusdrmila.lib<\/a><\/li>\n<li><a HREF=\"\/pre\/wma8.tree.txt\">wma8_rawdec_wince_x86.lib<\/a><\/li>\n<li><a HREF=\"\/pre\/wma9.tree.txt\">wmav9_rawdec_wince_x86.lib<\/a><\/li>\n<li><a HREF=\"\/pre\/wmv9.tree.txt\">wmv9_rawdec_wince_x86.lib<\/a><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/table>\n<p>I threw in Cinepak for old time&#8217;s sake. Anyone who has worked on RE&#8217;ing the DriverProc() function of a Microsoft VfW interface codec will appreciate the elegance of this bit of script output:<\/p>\n<p><code><br \/>\n-> _DriverProc<br \/>\n     _Load<br \/>\n     _Free<br \/>\n     _Open<br \/>\n     _Close<br \/>\n     _QueryAbout<br \/>\n     _About<br \/>\n     _QueryConfigure<br \/>\n     _Configure<br \/>\n     _GetState<br \/>\n     _SetState<br \/>\n     _GetInfo<br \/>\n     _Get<br \/>\n     _Set<br \/>\n     _GetQuality<br \/>\n     _SetQuality<br \/>\n     _GetDefaultQuality<br \/>\n     _GetDefaultKeyframeRate<br \/>\n     _CompressQuery<br \/>\n     _CompressBegin<br \/>\n     _CompressGetFormat<br \/>\n     _CompressGetSize<br \/>\n     _SetStatusProc<br \/>\n     _CompressFramesInfo<br \/>\n     _CompressFrames<br \/>\n     _Compress<br \/>\n     _CompressEnd<br \/>\n     _DecompressGetFormat<br \/>\n     _DecompressGetPalette<br \/>\n     _DecompressSetPalette<br \/>\n     _DecompressQuery<br \/>\n     _DecompressBegin<br \/>\n     _Decompress<br \/>\n     _DecompressEnd<br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A tool to generate shallow call trees&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,12],"tags":[],"class_list":["post-24","post","type-post","status-publish","format-standard","hentry","category-reverse-engineering","category-windows-media"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"A tool to generate shallow call trees...\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Multimedia Mike\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/multimedia.cx\/eggs\/building-up-trees\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Breaking Eggs And Making Omelettes | Topics On Multimedia Technology and Reverse Engineering\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes\" \/>\n\t\t<meta property=\"og:description\" content=\"A tool to generate shallow call trees...\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/multimedia.cx\/eggs\/building-up-trees\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2005-01-17T06:31:16+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2006-02-21T14:34:47+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A tool to generate shallow call trees...\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#article\",\"name\":\"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes\",\"headline\":\"Seeing The Forest For The Call Trees\",\"author\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#organization\"},\"datePublished\":\"2005-01-16T23:31:16-08:00\",\"dateModified\":\"2006-02-21T06:34:47-08:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#webpage\"},\"articleSection\":\"Reverse Engineering, Windows Media\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/multimedia.cx\\\/eggs\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/#listItem\",\"name\":\"Reverse Engineering\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/#listItem\",\"position\":2,\"name\":\"Reverse Engineering\",\"item\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/windows-media\\\/#listItem\",\"name\":\"Windows Media\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/windows-media\\\/#listItem\",\"position\":3,\"name\":\"Windows Media\",\"item\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/windows-media\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#listItem\",\"name\":\"Seeing The Forest For The Call Trees\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/#listItem\",\"name\":\"Reverse Engineering\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#listItem\",\"position\":4,\"name\":\"Seeing The Forest For The Call Trees\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/reverse-engineering\\\/windows-media\\\/#listItem\",\"name\":\"Windows Media\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#organization\",\"name\":\"Breaking Eggs And Making Omelettes\",\"description\":\"Topics On Multimedia Technology and Reverse Engineering\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/\",\"name\":\"Multimedia Mike\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2eb93f7cada658f7986b5092062849fa255779eada3342c8f6b9a40764b95fdd?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Multimedia Mike\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#webpage\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/\",\"name\":\"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes\",\"description\":\"A tool to generate shallow call trees...\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/building-up-trees\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\"},\"datePublished\":\"2005-01-16T23:31:16-08:00\",\"dateModified\":\"2006-02-21T06:34:47-08:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#website\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/\",\"name\":\"Breaking Eggs And Making Omelettes\",\"description\":\"Topics On Multimedia Technology and Reverse Engineering\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes","description":"A tool to generate shallow call trees...","canonical_url":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#article","name":"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes","headline":"Seeing The Forest For The Call Trees","author":{"@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author"},"publisher":{"@id":"https:\/\/multimedia.cx\/eggs\/#organization"},"datePublished":"2005-01-16T23:31:16-08:00","dateModified":"2006-02-21T06:34:47-08:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#webpage"},"isPartOf":{"@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#webpage"},"articleSection":"Reverse Engineering, Windows Media"},{"@type":"BreadcrumbList","@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs#listItem","position":1,"name":"Home","item":"https:\/\/multimedia.cx\/eggs","nextItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/#listItem","name":"Reverse Engineering"}},{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/#listItem","position":2,"name":"Reverse Engineering","item":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/","nextItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/windows-media\/#listItem","name":"Windows Media"},"previousItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/windows-media\/#listItem","position":3,"name":"Windows Media","item":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/windows-media\/","nextItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#listItem","name":"Seeing The Forest For The Call Trees"},"previousItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/#listItem","name":"Reverse Engineering"}},{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#listItem","position":4,"name":"Seeing The Forest For The Call Trees","previousItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/windows-media\/#listItem","name":"Windows Media"}}]},{"@type":"Organization","@id":"https:\/\/multimedia.cx\/eggs\/#organization","name":"Breaking Eggs And Making Omelettes","description":"Topics On Multimedia Technology and Reverse Engineering","url":"https:\/\/multimedia.cx\/eggs\/"},{"@type":"Person","@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author","url":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/","name":"Multimedia Mike","image":{"@type":"ImageObject","@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/2eb93f7cada658f7986b5092062849fa255779eada3342c8f6b9a40764b95fdd?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Multimedia Mike"}},{"@type":"WebPage","@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#webpage","url":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/","name":"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes","description":"A tool to generate shallow call trees...","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/multimedia.cx\/eggs\/#website"},"breadcrumb":{"@id":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/#breadcrumblist"},"author":{"@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author"},"creator":{"@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author"},"datePublished":"2005-01-16T23:31:16-08:00","dateModified":"2006-02-21T06:34:47-08:00"},{"@type":"WebSite","@id":"https:\/\/multimedia.cx\/eggs\/#website","url":"https:\/\/multimedia.cx\/eggs\/","name":"Breaking Eggs And Making Omelettes","description":"Topics On Multimedia Technology and Reverse Engineering","inLanguage":"en-US","publisher":{"@id":"https:\/\/multimedia.cx\/eggs\/#organization"}}]},"og:locale":"en_US","og:site_name":"Breaking Eggs And Making Omelettes | Topics On Multimedia Technology and Reverse Engineering","og:type":"article","og:title":"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes","og:description":"A tool to generate shallow call trees...","og:url":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/","article:published_time":"2005-01-17T06:31:16+00:00","article:modified_time":"2006-02-21T14:34:47+00:00","twitter:card":"summary","twitter:title":"Seeing The Forest For The Call Trees | Breaking Eggs And Making Omelettes","twitter:description":"A tool to generate shallow call trees..."},"aioseo_meta_data":{"post_id":"24","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-31 21:42:24","updated":"2025-12-31 18:06:59","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/multimedia.cx\/eggs\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/\" title=\"Reverse Engineering\">Reverse Engineering<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/windows-media\/\" title=\"Windows Media\">Windows Media<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tSeeing The Forest For The Call Trees\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/multimedia.cx\/eggs"},{"label":"Reverse Engineering","link":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/"},{"label":"Windows Media","link":"https:\/\/multimedia.cx\/eggs\/category\/reverse-engineering\/windows-media\/"},{"label":"Seeing The Forest For The Call Trees","link":"https:\/\/multimedia.cx\/eggs\/building-up-trees\/"}],"_links":{"self":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/24","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/comments?post=24"}],"version-history":[{"count":0,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/24\/revisions"}],"wp:attachment":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/media?parent=24"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/categories?post=24"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/tags?post=24"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}