Detect if an assembly is a managed assembly

by Koen 29. October 2009 03:17

While using a great IOC/DI container (read for those not familiar with it read this post) I wrote some code to auto detect and auto load the necessary dependencies (I really, really, REALLY hate the XML configuration file so …) Besides a lot of other issues with this method worth a blog post on it’s own, the whole thing crashed as soon as an unmanaged assembly was found in the path.

After some googling I found a few ways to solve my problem:

Use .Net Reflection:

Try to do a AssemblyName.GetAssemblyName(path); If it throws an exception it’s not a managed assembly. As you would suspect this is horribly slow.

Read the binary data from the assembly to detect the assembly type.

Actually the .Net managed assemblies are with specific values in the header. To read these we could use the command and then walk through the headers with pointers as explained on this site. Since this loads the assembly in memory it was a no-go for me.

There are alot of unmanaged solutions out there (read here and here) that are candidates to port to c# but Rupreet’s weblog saved the day. And here are the relevant code fragments of my AssemblyInfo class:

   1:  try
   2:  {
   3:      if (dataDictionaryRVA == null)
   4:      {
   5:          GetHeaders();
   6:      }
   7:      return dataDictionaryRVA[14] != 0;
   8:  }
   9:  catch (Exception)
  10:  {
  11:      // when an error occurs return false.
  12:  }
  13:  return false;

Obviously the interesting code is inside the GetHeaders method including the comments from Rupreet:

   1: dataDictionaryRVA = new uint[16];
   2: dataDictionarySize = new uint[16];
   3:  
   4: using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
   5: {
   6:     BinaryReader reader = new BinaryReader(fs);
   7:  
   8:     //PE Header starts @ 0x3C (60). Its a 4 byte header.
   9:     fs.Position = PeHeaderStart;
  10:     peHeader = reader.ReadUInt32();
  11:  
  12:     //Moving to PE Header start location...
  13:     fs.Position = peHeader;
  14:     peHeaderSignature = reader.ReadUInt32();
  15:  
  16:     //We can also show all these value, but we will be       
  17:     //limiting to the CLI header test.
  18:     machine = reader.ReadUInt16();
  19:     sections = reader.ReadUInt16();
  20:     timestamp = reader.ReadUInt32();
  21:     pSymbolTable = reader.ReadUInt32();
  22:     noOfSymbol = reader.ReadUInt32();
  23:     optionalHeaderSize = reader.ReadUInt16();
  24:     characteristics = reader.ReadUInt16();
  25:  
  26:     /*
  27:     Now we are at the end of the PE Header and from here, the
  28:     PE Optional Headers starts...
  29:     To go directly to the datadictionary, we'll increase the      
  30:     stream’s current position to with 96 (0x60). 96 because,
  31:     28 for Standard fields
  32:     68 for NT-specific fields
  33:     From here DataDictionary starts...and its of total 128 bytes. DataDictionay has 16 directories in total,
  34:     doing simple maths 128/16 = 8.
  35:     So each directory is of 8 bytes.
  36:     In this 8 bytes, 4 bytes is of RVA and 4 bytes of Size.
  37: 
  38:     btw, the 15th directory consist of CLR header! if its 0, its not a CLR file :)
  39:     */
  40:  
  41:     dataDictionaryStart = Convert.ToUInt16(Convert.ToUInt16(fs.Position) + 0x60);
  42:     fs.Position = dataDictionaryStart;
  43:  
  44:     for (int i = 0; i < 15; i++)
  45:     {
  46:         dataDictionaryRVA[i] = reader.ReadUInt32();
  47:         dataDictionarySize[i] = reader.ReadUInt32();
  48:     }
  49:  
  50:     fs.Close();
  51: }

My complete class implementation is here:

   1: using System;
   2: using System.IO;
   3: using System.Reflection;
   4:  
   5: namespace Williame.Koen.Blog
   6: {
   7:     /// <summary>
   8:     /// Returns information about an assembly without loading it into the appdomain.
   9:     /// </summary>
  10:     public class AssemblyInfo
  11:     {
  12:         /// <summary>
  13:         /// PE Header starts @ 0x3C (60). Its a 4 byte header.
  14:         /// </summary>
  15:         public const long PeHeaderStart = 0x3C;
  16:  
  17:         protected uint peHeader;
  18:         protected uint peHeaderSignature;
  19:         protected ushort machine;
  20:         protected ushort sections;
  21:         protected uint timestamp;
  22:         protected uint pSymbolTable;
  23:         protected uint noOfSymbol;
  24:         protected ushort optionalHeaderSize;
  25:         protected ushort characteristics;
  26:         protected ushort dataDictionaryStart;
  27:         protected uint[] dataDictionaryRVA;
  28:         protected uint[] dataDictionarySize;
  29:         protected string file;
  30:         protected AssemblyName name; 
  31:  
  32:         public AssemblyInfo(string fileName)
  33:         {
  34:             this.file = Path.GetFullPath(fileName);
  35:         }
  36:  
  37:         protected void GetHeaders()
  38:         {
  39:             dataDictionaryRVA = new uint[16];
  40:             dataDictionarySize = new uint[16];
  41:  
  42:             using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
  43:             {
  44:                 BinaryReader reader = new BinaryReader(fs);
  45:  
  46:                 //PE Header starts @ 0x3C (60). Its a 4 byte header.
  47:                 fs.Position = PeHeaderStart;
  48:                 peHeader = reader.ReadUInt32();
  49:  
  50:                 //Moving to PE Header start location...
  51:                 fs.Position = peHeader;
  52:                 peHeaderSignature = reader.ReadUInt32();
  53:  
  54:                 //We can also show all these value, but we will be       
  55:                 //limiting to the CLI header test.
  56:                 machine = reader.ReadUInt16();
  57:                 sections = reader.ReadUInt16();
  58:                 timestamp = reader.ReadUInt32();
  59:                 pSymbolTable = reader.ReadUInt32();
  60:                 noOfSymbol = reader.ReadUInt32();
  61:                 optionalHeaderSize = reader.ReadUInt16();
  62:                 characteristics = reader.ReadUInt16();
  63:  
  64:                 /*
  65:                 Now we are at the end of the PE Header and from here, the
  66:                 PE Optional Headers starts...
  67:                 To go directly to the datadictionary, we'll increase the      
  68:                 stream’s current position to with 96 (0x60). 96 because,
  69:                 28 for Standard fields
  70:                 68 for NT-specific fields
  71:                 From here DataDictionary starts...and its of total 128 bytes. DataDictionay has 16 directories in total,
  72:                 doing simple maths 128/16 = 8.
  73:                 So each directory is of 8 bytes.
  74:                 In this 8 bytes, 4 bytes is of RVA and 4 bytes of Size.
  75: 
  76:                 btw, the 15th directory consist of CLR header! if its 0, its not a CLR file :)
  77:                 */
  78:  
  79:                 dataDictionaryStart = Convert.ToUInt16(Convert.ToUInt16(fs.Position) + 0x60);
  80:                 fs.Position = dataDictionaryStart;
  81:  
  82:                 for (int i = 0; i < 15; i++)
  83:                 {
  84:                     dataDictionaryRVA[i] = reader.ReadUInt32();
  85:                     dataDictionarySize[i] = reader.ReadUInt32();
  86:                 }
  87:  
  88:                 fs.Close();
  89:             }
  90:         }
  91:  
  92:         public bool IsManaged
  93:         {
  94:             get
  95:             {
  96:                 try
  97:                 {
  98:                     if (dataDictionaryRVA == null)
  99:                     {
 100:                         GetHeaders();
 101:                     }
 102:                     return dataDictionaryRVA[14] != 0;
 103:                 }
 104:                 catch (Exception)
 105:                 {
 106:                     // when an error occurs return false.
 107:                 }
 108:                 return false;
 109:             }
 110:         }
 111:  
 112:         public AssemblyName Name
 113:         {
 114:             get
 115:             {
 116:                 if (name == null)
 117:                 {
 118:                     name = AssemblyName.GetAssemblyName(file);
 119:                 }
 120:                 return name;
 121:             }
 122:         }
 123:     }
 124: }

As you can see, I also included the AssemblyName which can give me some more information withtout loading the assembly in memory.

Issues:

  • This is example code so be careful with it in production code.
  • In addition, check the "magic" field of the PE header (the first 2 bytes) to ensure it is a 32-bit image file (0x010B). The data directory table for 64-bit PE headers start at offset 112 - as opposed to 96 for 32-bit headers.
  • This example ignores recommendations in Microsoft's PE specification to check the values of size fields so you don't read the wrong data

Tags: , , , , , ,

Structuremap

Comments

2/17/2010 5:58:20 PM #

Nicolas Daul

This is a excellent post, but I was wondering how do I suscribe to the RSS feed?

Nicolas Daul United States | Reply

2/19/2010 1:20:04 AM #

Arianne Grum

This is a very fascinating post, I was looking for this info. Just so you know I located your webpage when I was browsing for blogs like mine, so please check out my site sometime and leave me a comment to let me know what you think.

Arianne Grum United States | Reply

6/4/2010 7:44:27 AM #

glass door refrigerators

Im not going to say what everyone else has already said, but I do want to comment on your knowledge of the topic.  Youre truly well-informed.  I cant believe how much of this I just wasnt aware of.  Thank you for bringing more information to this topic for me.  Im truly grateful and really impressed.

glass door refrigerators United States | Reply

6/4/2010 11:32:37 AM #

lipo 6

Gratitude in support of captivating made the effort headed for job this.

lipo 6 United States | Reply

6/4/2010 5:13:01 PM #

Agueda Hohmeier

This is a really good post, but I was wondering how do I suscribe to the RSS feed?

Agueda Hohmeier United States | Reply

6/5/2010 3:52:10 AM #

Lidia

You try the Lynx alpha yet? I'm wondering if I should get it, want to hear any thoughts

Lidia United States | Reply

6/5/2010 9:25:55 AM #

dropship housewares

Just a question.  Do you think you could add a little more in the way of content here?  I think youve got some interesting points, but Im just not sold.  If you really want to get the crowd behind you, youve got to entertain us, man.  Maybe you could add a video or two to drag the message home.

dropship housewares United States | Reply

6/7/2010 10:12:19 AM #

lose belly fat

i understand what you mean cuz i run a private Diablo II realm and kids just spam massivly dont read topics talk smack ect… thats why i dont post much on my site or others cuz of crap like this cuz when ever i do post something i get nothing but smack talkin or they flame me but keep up the good work

lose belly fat | Reply

6/7/2010 10:15:00 AM #

replica watches

Its like you read my mind!  You seem to know so much about this, like you wrote the book in it or something.  I think that you could do with some pics to drive the message home a bit, but other than that, this is great blog.  A great read.  Ill definitely be back.

replica watches United States | Reply

6/9/2010 12:59:42 AM #

executive coach

Moving and powerful!  Youve certainly got a way of reaching people that I havent seen very often.  If most people wrote about this subject with the eloquence that you just did, Im sure people would do much more than just read, theyd act.  Great stuff here.  Please keep it up.

executive coach United States | Reply

6/9/2010 9:30:45 AM #

absolute condos mississauga

I hope you never stop!  This is one of the best blogs Ive ever read.  Youve got some mad skill here, man.  I just hope that you dont lose your style because youre definitely one of the coolest bloggers out there.  Please keep it up because the internet needs someone like you spreading the word.

absolute condos mississauga United States | Reply

6/10/2010 10:20:57 AM #

car insurance

All I want to say is, yes!  Yes!  Yes!  Youre so right.  I want to get behind this so much.  You speak with so much authority, so much spirit, I feel as though youve definitely hit the nail on the head.  Good job with this.  Please keep brining us more because we need more of your type of blogger.

car insurance United States | Reply

6/10/2010 10:30:49 AM #

Evening Dresses

With more 1000 Designer dresses,we supply Evening Dresses,Custom Dresses,formal gowns,cocktail dresses with wholesale price.
[url=http://www.dress4dancing.com ]   Cheap Evening Dresses[/url]
[url=http://www.dress4dancing.com ]  Evening Dresses[/url]
[url=http://www.dress4dancing.com ]  Prom Dress[/url]
Shop for cheap discount prom dresses, evening gowns, evening dresses, formal dresses, bridesmaids dresses, ball gowns, dress for prom 2010.
[url=http://www.dresssale.co.uk]prom dresses[/url]
Evening Dresses, Formal Dresses, Evening Gowns, Prom Dresses, Cocktail Dress, Party Dresses, Sexy Dresses, and Short Dresses at great low prices
[url=http:/scx ascxa s/www.dresssale.co.uk]cheap prom dresses[/url]
[url=http://www.drac aesssale.co.uk]cheap  wedding dresses[/url]
Get your Prom Evening dress, Homecoming gown, Formal Bridesmaid gown or Military
Please browse PromPartyDre as ss.com and select your Evening Prom dress.
[url=http://www.dresssale.co.uk]wedding dresses[/url]

Evening Dresses People's Republic of China | Reply

6/11/2010 12:58:37 PM #

penis enhancement pills

Write more, thats all I have to say.  Literally, it seems as though you relied on the video to make your point.  You clearly know what youre talking about, why waste your intelligence on just posting videos to your blog when you could be giving us something enlightening to read?

penis enhancement pills United States | Reply

6/12/2010 7:15:30 AM #

snoring earplugs

Its like you read my mind!  You seem to know so much about this, like you wrote the book in it or something.  I think that you could do with some pics to drive the message home a bit, but other than that, this is great blog.  A great read.  Ill definitely be back.

snoring earplugs United States | Reply

6/12/2010 10:43:08 AM #

hockey jersey

Its amazing, looking at the time and effort you put into your blog and detailed information you provide. I'll bookmark your blog and visit it weekly for your new posts

hockey jersey Luxembourg | Reply

6/12/2010 10:44:51 AM #

baseball jerseys

Thanks a lot for enjoying this beauty article with me. I am apreciating it very much! Looking forward to another great article. Good luck to the author! all the best!

baseball jerseys Hong Kong S.A.R. | Reply

6/13/2010 11:56:11 AM #

accent lighting

Thank you for such a great blog! I cant wait to start these activities with my kids. I hope you would publish more posts like this, some activities like this to enjoy the whole year round!

accent lighting United States | Reply

6/13/2010 6:14:12 PM #

home window tinting atlanta

Write more, thats all I have to say.  Literally, it seems as though you relied on the video to make your point.  You clearly know what youre talking about, why waste your intelligence on just posting videos to your blog when you could be giving us something enlightening to read?

home window tinting atlanta United States | Reply

6/14/2010 1:40:53 PM #

p90x workout

Many thanks for this terrific post it was extremely informative and helped me with my own project I'm looking to complete

p90x workout United States | Reply

6/14/2010 7:11:33 PM #

college girls

How is it that just anybody can write a blog and get as popular as this?  Its not like youve said anything incredibly impressive --more like youve painted a pretty picture over an issue that you know nothing about!  I dont want to sound mean, here.  But do you really think that you can get away with adding some pretty pictures and not really say anything?

college girls United States | Reply

6/15/2010 4:37:00 PM #

Svitlana.Net.Ua

I would like to thank you for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own BlogEngine blog now.

Svitlana.Net.Ua United States | Reply

6/17/2010 3:03:20 PM #

няня

I would like to thank you for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own BlogEngine blog now.
http://svitlana.net.ua/staff/category/3/ гувернантка, http://svitlana.net.ua/staff/category/5/ повар, http://svitlana.net.ua/staff/category/6/ садовник, http://svitlana.net.ua/staff/category/10/ репетитор, http://svitlana.net.ua/staff/category/4 домработница, http://svitlana.net.ua/staff/category/8/ семейная пара, http://svitlana.net.ua/pages/2/ работа няней.

няня United States | Reply

6/18/2010 7:05:08 PM #

Home Remedies for Acne

Im no expert, but I think you just made the best point.  You obviously know a lot about what youre talking about, and I can really get behind that.  Thanks for being so upfront and so honest about the subject matter.  I really feel like I have a better understanding now.

Home Remedies for Acne United States | Reply

6/19/2010 6:16:42 PM #

rhinestones wholesale

What I dont understand is how youre not even more popular than you are now.  Youre just so intelligent.  You know so much about this subject, made me think about it from so many different angles.  Its like people arent interested unless it has something to do with Lady Gaga!  Your stuffs great.  Keep it up!

rhinestones wholesale United States | Reply

6/22/2010 9:54:55 AM #

Liegerad

Hrmm that was weird, my comment got eaten. Anyway I wanted to say that it's nice to know that someone else also mentioned this as I had trouble finding the same info elsewhere. This was the first place that told me the answer. Thanks.

Liegerad United States | Reply

6/22/2010 11:04:16 AM #

DC MICRO MOTOR

I really appreciate what you’re doing here.

DC MICRO MOTOR People's Republic of China | Reply

6/22/2010 11:04:44 AM #

true religion

Thanks for putting the thought in and writing it

true religion People's Republic of China | Reply

6/23/2010 9:27:07 AM #

backpack laptop bags

Nice post to hang on..I really loved it the way of the stuff provided in this article..This has given very useful information..

backpack laptop bags United States | Reply

6/23/2010 3:09:54 PM #

custom essays

I'm looking for information about it, because I must write an essay on that subject. Thank you for so nice article, I found here a lot of useful details.

custom essays Puerto Rico | Reply

6/23/2010 7:44:33 PM #

Каталог проституток

Многие девушки легкого поведения, ходят на курсы, на которых учатся делать специальный эротический массаж, расслабляющий и тонизирующий. Это своего рода тоже искусство, и незнающий человек никогда не сделает его качественно и профессионально. А это является частью прелюдии, которая помогает расслабиться и настроится на секс. Поэтому, многие путаны уделяют этому вопросу очень много внимания, и стараются делать его качественно.

Каталог проституток United States | Reply

6/24/2010 8:03:07 AM #

Сексуальные проститутки

Проститутки Сочи самые страстные и горячие. По статистике, проститутки Сочи, самые страстные и горячие, и статистику подтверждает большинство мнений мужчин, которые там живут.

Сексуальные проститутки United States | Reply

6/25/2010 4:14:17 AM #

multiple streams of income

Your page is so fantastic!  You sure do know how to keep your audience entertained.  Im so glad that I took the time to look at this blog, because let me tell you.  Not a lot of people know how to balance knowledge of a subject and content.  The videos are perfect!

multiple streams of income United States | Reply

6/27/2010 3:16:07 AM #

e-pokeronline.ru

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts.Any way Ill be subscribing to your feed and I hope you post again soon

e-pokeronline.ru United States | Reply

6/29/2010 5:09:42 PM #

term papers writing

It's the best article on that subject I ever met in the web. I've read some posts here and this one I like most of all. Good job. Thanks.

term papers writing Puerto Rico | Reply

6/30/2010 1:49:06 AM #

household toys

I dont know what to say.  This is definitely one of the better blogs Ive read.  Youre so insightful, have so much real stuff to bring to the table.  I hope that more people read this and get what I got from it:  chills.  Great job and great blog.  I cant wait to read more, keep em comin!

household toys United States | Reply

6/30/2010 5:18:17 AM #

criminal background checks

I wonder how you got so good.  HaHa!  This is really a fascinating blog, lots of stuff that I can get into.  One thing I just want to say is that your design is so perfect!  You certainly know how to get a girls attention!  Im glad that youre here.  I feel like Ive learned something new by being here.

criminal background checks United States | Reply

7/1/2010 8:39:02 PM #

cell phone plans

Love, love, LOVE this blog!  You say everything that Im thinking and more.  Youve definitely shed light on a subject that not many people can argue with.  Youre so good at getting what you want to say out there in a way thats intelligent and entertaining.  Im really impressed, man.  REALLY impressed.

cell phone plans United States | Reply

7/3/2010 5:25:12 PM #

Fat Loss Tips

I absolutly can not stand it when people leave bad comments on any site, including my own. People only leave bad comments just to be able to win something in a giveaway.

Fat Loss Tips United States | Reply

7/3/2010 9:09:47 PM #

hyper hydrosis

This is definitely a topic thats close to me so Im happy that you wrote about it.  Im also happy that you did the subject some justice.  Not only do you know a great deal about it, you know how to present in a way that people will want to read more.  Im so happy to know someone like you exists on the web.

hyper hydrosis United States | Reply

7/4/2010 10:31:41 PM #

Магазин сантехники

It\\\'s an intriguing approach. I ordinarily stumble upon ordinary thoughts on the theme but yours it\\\'s written in a pretty special way. Sure enough, I will revisit your website for additional information.

Магазин сантехники United States | Reply

7/5/2010 7:34:22 AM #

Willena Belsito

I encounterd difficulties studying your blog with safari browser, you'd better update your weblog

Willena Belsito Austria | Reply

7/5/2010 11:29:34 PM #

handmade soap

How is it that just anybody can write a blog and get as popular as this?  Its not like youve said anything incredibly impressive --more like youve painted a pretty picture over an issue that you know nothing about!  I dont want to sound mean, here.  But do you really think that you can get away with adding some pretty pictures and not really say anything?

handmade soap United States | Reply

7/6/2010 8:11:00 AM #

Boris Jerez

I don't agree with the whole thing in this post, but you do make some very good points. I'm very excited about this subject and I personally act alot of study as well. Either way it was a well thoughtout & nice read so I figured I would leave u a remark. Feel free to take a look at my site sometime and let me know what you feel.

Boris Jerez Denmark | Reply

7/8/2010 4:34:04 AM #

Проститутки в Москве

I really loved reading your thoughts, obviously you know what are you talking about! Your site is so easy to use too, I’ve bookmark it in my folder :-D

Проститутки в Москве United States | Reply

7/8/2010 7:52:07 AM #

oregon birth injury attorney

I dont know what to say.  This blog is fantastic.  Thats not really a really huge statement, but its all I could come up with after reading this.  You know so much about this subject.  So much so that you made me want to learn more about it.  Your blog is my stepping stone, my friend.  Thanks for the heads up on this subject.

oregon birth injury attorney United States | Reply

7/8/2010 4:31:36 PM #

Московские Индивидуалки

I like your blog so much that I feel I have to wish you. Happy New Year in advance. Have a nice and prosperous year ahead

Московские Индивидуалки United States | Reply

7/8/2010 6:31:57 PM #

tuition in petaling jaya

Im not gonna lie, youve lost me here.  I know that you meant well and you obviously know what youre talking about, but I cant say that I get where youre coming from.  If you want people to understand your points, you should think about the other side of the argument, too.  Youve got a wealth of knowledge, Ill give you that.  But, quite frankly, you turned me off with your tone.

tuition in petaling jaya United States | Reply

7/10/2010 3:21:14 AM #

debt collection agencies

What did you do, just say whatever it is you wanted to make people mad?!  You cant just say something like that and not give any backup for it!  Youve got to at least give me a reason to think that you know what youre talking about, otherwise, you just sound like some kid with a grudge!

debt collection agencies United States | Reply

7/10/2010 6:20:31 PM #

payday loans

Every business is built on friendship.

payday loans United States | Reply

7/10/2010 9:46:33 PM #

Проститутки

You gave nice ideas here. I done a research on the issue and learnt most peoples will agree with your blog. Certainly, these practices are unfair; but they say that most of their rules are only to apply to people who overdraw.

Проститутки United States | Reply

7/11/2010 2:19:17 AM #

Umzug

This is one of the most incredible blogs Ive read in a very long time.  The amount of information in here is stunning, like you practically wrote the book on the subject.  Your blog is great for anyone who wants to understand this subject more.  Great stuff; please keep it up!

Umzug United States | Reply

7/11/2010 9:45:28 AM #

Проститутки

You gave nice ideas here. I done a research on the issue and learnt most peoples will agree with your blog. Certainly, these practices are unfair; but they say that most of their rules are only to apply to people who overdraw.

Проститутки United States | Reply

7/11/2010 7:45:43 PM #

Новинки сантехники

It\\\'s an intriguing approach. I commonly see minimalist judgments on the matter but yours it\'s written in a pretty special way. For sure, I will revisit your site for more info.

Новинки сантехники United States | Reply

7/13/2010 12:09:14 PM #

online payday loans

You can only expand your capacities by working to the very limit http://www.clicknpayday.com

online payday loans United States | Reply

7/13/2010 10:40:53 PM #

amazon coupons

amazon coupon codes

amazon coupons United States | Reply

7/14/2010 8:12:40 PM #

appliance repair los angeles

Can I make a suggestion?  I think youve got something good here.  But what if you added a couple links to a page that backs up what youre saying?  Or maybe you could give us something to look at, something that would connect what youre saying to something tangible?  Just a suggestion.

appliance repair los angeles United States | Reply

7/14/2010 11:10:23 PM #

Kyung Katsaounis

Hi admin I enjoy with ur article . May i use this article for my university test ? thanks admin of http://gadgetax.com

Kyung Katsaounis United Kingdom | Reply

7/15/2010 4:14:47 AM #

lenen zonder bkr toetsing

Lenen zonder BKR toetsing gaat vandaag heel gemakkelijk. Binnen een paar uur geld lenen zonder BKR toetsing doet u hier, lees snel verder

lenen zonder bkr toetsing United States | Reply

7/15/2010 11:33:44 PM #

unique fundraising

For what its worth, the layout is definitely amazing.  You know how to balance writing and images/videos.  However, I cant get over how little you actually bring to light here.  I think that everyones said the same thing that youve said over and over again.  Dont you think its time for something more?

unique fundraising United States | Reply

7/16/2010 8:01:10 PM #

gel makeup remover

Instant messaging delighted We identified that website page, My partner and i couldnt select virtually any information on this matter before. Also deal with an internet site plus if you need to at any time considering doing a bit of invitee writing to me you must do make me aware, instant messaging look for folks to check out our site. I highly recommend you stop by and leave any review a few minutes!

gel makeup remover United States | Reply

7/17/2010 7:00:12 PM #

Houses to Buy

Just a question.  Do you think you could add a little more in the way of content here?  I think youve got some interesting points, but Im just not sold.  If you really want to get the crowd behind you, youve got to entertain us, man.  Maybe you could add a video or two to drag the message home.

Houses to Buy United States | Reply

7/19/2010 10:16:01 AM #

Kobe Bryant Shoes

I know a new method to  decorate the house from the post.Not only simple,but also generous. Dior high-heeled shoes</a>Don't let a person feel extravagant. I recommend several websites to you that contents are very rich  you can go and see . <a href="www.usa-basketball-shoes.com/...Soldier.html" >Nike Zoom LeBron James Soldier</a>

Kobe Bryant Shoes People's Republic of China | Reply

7/19/2010 2:35:17 PM #

Walter

sagabindara salutes you all out there

Walter Germany | Reply

7/19/2010 4:28:20 PM #

bijuterii argint

I dont know what to say.  This is definitely one of the better blogs Ive read.  Youre so insightful, have so much real stuff to bring to the table.  I hope that more people read this and get what I got from it:  chills.  Great job and great blog.  I cant wait to read more, keep em comin!

bijuterii argint United States | Reply

7/21/2010 8:30:56 PM #

http://www.advanceloan.net/payday-advances.php

Can I just say, this blog is what got me through the day today.  Every time I read it, I just get more and more excited about whats next.  Very refreshing blog and very refreshing ideas.  Im glad that I came across this when I did.  I love what youve got to say and the way you say it.

http://www.advanceloan.net/payday-advances.php United States | Reply

7/22/2010 7:04:13 PM #

subject utilities

This article gives the light in which we can observe the reality. This is very nice one and gives in depth information. Thanks for this nice article. Good post.....Valuable information for all.

subject utilities United States | Reply

7/22/2010 9:39:51 PM #

bad credit payday loan

I expect Woman will be the last thing civilized by Man.

bad credit payday loan United States | Reply

7/25/2010 2:19:25 AM #

migraine

Migraine is te genezen. Praktijk voor Migraine, Hoofdpijn en Hormoonstoornissen.

migraine United States | Reply

7/29/2010 5:46:05 PM #

home tutor

Your blog is outrageous!  I mean, Ive never been so entertained by anything in my life!  Your vids are perfect for this.  I mean, how did you manage to find something that matches your style of writing so well?  Im really happy I started reading this today.  Youve got a follower in me for sure!

home tutor United States | Reply

7/30/2010 6:45:54 AM #

Health and Beauty

I dont know who you think you are, but youre just blowing smoke out your ears.  Nothing youre saying makes sense and its all a bunch of immature ranting.  If you want people to get behind your blog, you should at the very least learn a little something about what youre talking about!

Health and Beauty United States | Reply

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading