is reflection reverse engineering?
The border between the two does seem blurred. Ethically I would draw the line in the programmer’s motivation. If he is using reflection to build a library, tool or similar software that is supposed to interact with any 3rd party code that satisfies certain criteria, I would not see it as reverse engineering. For example, I was recently writing a generic base class for Linq2SQL data layers. The base class uses reflection to gain insight into the database layout and properly handle updates of nested business entities. If someone else uses my bases class for his web application, I would not gain any knowledge about the his source code. This usage of reflection is certainly no reverse engineering. If, on the other hand, the programmer is trying to understand the inner workings by a competitor’s software using reflection, he is reverse engineering it.