From: Ulf W. <ul...@wi...> - 2006-11-30 17:51:07
|
Den 2006-11-30 15:55:30 skrev Micka=EBl R=E9mond =20 <mic...@pr...>: > Hello, > > I was looking at the code to see how your compilation is working. > From what I understand, you are getting the source (string or > binary) then parsing and transforming the code source to something > more secure, then writing the resulting file in a kind of virtual > file system ? Yes, that's pretty much it. I use a couple of tricks: - I have a slightly patched ram_file_io_server, which allows me to store the source in a ram file, and then let epp_dodger read it (one of the reasons for using epp_dodger was that it could do this, while epp couldn't) - Once given a syntax tree by epp_dodger, I perform several transforms. I try to decide at compile-time whether a function call is safe; if I can't, I wrap it inside a resolver function, which gets to look at it at runtime. - If a module named erlhive.User.Mod something is called, I wrap it inside one resolver function if it's owned by the current user (in which case we only need to worry about dynamic code loading from Mnesia), and another if it's owned by someone else. This wrapper will check whether that module is loaded, and then call a magic function called '$erlhive_area_f$'() or something like that. It will tell me whether the module is public or private. If the module isn't loaded, I check whether I can read it from the database (I can't if it isn't public), then load it into memory and call it. There's lots more going on, but it's time to put the kids to bed. I guess I should document the transform... > I looked quickly at the code, but I see a lot of magic here. > Looks very good :) Why, thanks. (: /Ulf W --=20 Ulf Wiger |