Thursday, September 23, 2010

Executing a ByteString

Why not!

{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign ( FunPtr, withForeignPtr, castPtrToFunPtr )
import System ( getArgs )
import qualified Data.ByteString as B ( pack, ByteString )
import qualified Data.ByteString.Internal as B ( toForeignPtr )

payload :: B.ByteString
payload = B.pack [
0x55, -- push %rbp
0x48, 0x89, 0xe5, -- mov %rsp,%rbp
0x89, 0x7d, 0xec, -- mov %edi,-0x14(%rbp)
0xc7, 0x45, 0xfc,
1, 0, 0, 0, -- movl $0x1,-0x4(%rbp)
0xeb, 0x0e, -- jmp 1e <fact+0x1e>
0x8b, 0x45, 0xfc, -- mov -0x4(%rbp),%eax
0x0f, 0xaf, 0x45, 0xec, -- imul -0x14(%rbp),%eax
0x89, 0x45, 0xfc, -- mov %eax,-0x4(%rbp)
0x83, 0x6d, 0xec, 1, -- subl $0x1,-0x14(%rbp)
0x83, 0x7d, 0xec, 1, -- cmpl $0x1,-0x14(%rbp)
0x7f, 0xec, -- jg 10 <fact+0x10>
0x8b, 0x45, 0xfc, -- mov -0x4(%rbp),%eax
0xc9, -- leaveq
0xc3 ] -- retq

type F = Int -> Int

foreign import ccall "dynamic"
getF :: FunPtr F -> F

main :: IO ()
main = do
[s] <- getArgs
n <- readIO s
let (fptr, _, _) = B.toForeignPtr payload
withForeignPtr fptr $ \ptr -> do
let f = getF $ castPtrToFunPtr ptr
print $ f n

Testing it:

$ runhaskell foo.hs 6
720

This code will only work on x86-64.

11 comments:

  1. For completeness, how about posting the code for getF?

    ReplyDelete
  2. Yitz:

    This code is complete. 'foreign import "dynamic"' is a special type of import, producing a function which turns function pointers into Haskell functions.

    This might involve some extra C / Cmm code, but it's generated automatically by GHC.

    ReplyDelete
  3. Now we just need a quasiquoter that calls an assembler to make inline assembly :)

    ReplyDelete
  4. copumpkin: you can try out Harpy (search for package harpy on Hackage) for an assembler DSL for 32-bit Intel code.

    ReplyDelete
  5. >> Why not!

    For security reasons, of course !
    Unless you want Haskell to be the new C, as far as execution of arbitrary code is concerned…

    ReplyDelete
  6. To where to find wps pin on hp printer between HP printer and PC, utilizing a WPS Pin is

    fundamental. Become acquainted with how to discover it and make it being used.

    ReplyDelete
  7. TS Inter 1st & 2nd Year Model Paper 2022 Available Students you can Download in PDF format form this web page below given links. BIE Telangana Regular and Private Students Prepare their Exam from these Sample Papers, Students have to Register for Appearing in Public Exam 2022. TS 12th Model Paper 2022 So if you are also among those students who have Registered them self as a Regular or Private Student are Suggested to Download these Sakshi TS Inter 1st & 2nd Year Sample Paper 2022 must Prepare all Subjects. Model Papers are very helpful Material that is Provided by the official education Board.

    ReplyDelete
  8. استعمال رغوة العزل تستعملُ رغوة العزل بشكل كبير في مقاومة الرطوبة، إذ تستخدم غالباً في الطوابق السفلية، وطابق العلية، وفيما يأتي خطوات العزل باستعمال هذه المادة:
    تحديد حجم المنطقة المراد عزلها: ينبغي معرفة المساحة المراد عزلها، إذ يعتبر هذا النوع من العزل ملائماً لعزل منطقة العلية، والطوابق السفلية، ويتم ذلك باستعمال المرش ذي الضغط المنخفض، أما لإغلاق الفتحات الصغيرة كالفراغات حول النوافذ، والأبواب، وغيرها فيمكن استعمال علب الرش الصغيرة.
    فوائد عزل المنزل
    يوجد العديد من الفوائد التي يمكن الحصول عليه نتيجة القيام بعزل المنازل، ومن أهم هذه الفوائد ما يأتي: التقليل من انتقال الطاقة الحرارية من خلال الأسطح، والأرضيات، والجدران؛ مما يعمل على المحافظة على درجة حرارة المنزل صيفاً، وشتاءًالحد من المشكلات التي تتسبب بها الحشرات، عن طريق استخدام كتل رغوية معالجة بالمبيدات الحشرية مما يمنع وصولها إلى المنزل

    شركة عزل اسطح بتبوك

    الخزانات من أهم الأشياء التي لابد من وجودها في المنزل ، و ذلك لأنها تعمل على حفظ المياه باستمرار في وقت انقطاعها ، و كذلك تعمل على حفظها بجودة عالية ، و هناك العديد من الشركات التي توفر خدمات عزل الخزانات و منها على سبيل المثال شركة المتميز
    و هذه الشركة توفر العديد من الخدمات المختلفة ، و على رأس الخدمات التي توفرها مختلف أعمال العزل المائي و الحراري و الصوتى ، حيث تعمل الشركة علي توفير العديد من الخدمات التي تتعلق بعزل الخزانات ، حيث تعمل الشركة على توفير العديد من الطرق التي يمكن الاعتماد عليها في عزل الخزانات ، و التي تمتاز بعدم تفاعلها مع المياه لضمان جودة المياه الموجودة بها.

    الشركة تعمل على توفير العديد من الخدمات المميزة ، و من بينها مختلف أعمال الصيانة ، هذا بالإضافة إلى توفير العديد من الخدمات التي تتمثل في العزل سواء العزل المائي أو الحراري و غيرها ، كذلك توفر الشركة خدمات مميزة تتعلق بعزل الخزانات ، و ذلك بالاعتماد على تقنيات عالية الجودة ، هذه التقنيات لا تتفاعل مع المياه و لا تؤثر على جودتها ، و يتم انتقائها تبعا لنوع الخزان سواء كان بلاستيك أو خرساني و كذلك سواء كان سط

    شركة عزل خزانات بالاحساء

    ReplyDelete
  9. ปัจจุบันแมวได้รับความนิยมในการเลี้ยงหลายสายพันธุ์มากขึ้น ไม่ว่าจะเป็นแมวสายพันธุ์ต่างประเทศ หรือแมวสายพันธุ์ไทย เเมวสายพันธุ์ไทยนั้นก็มีความน่ารัก สวยงามที่ไม่เเพ้สายพันธุ์ต่างประเทศ เราจะพาทุกท่านไปรู้จักกับ เเมวสายพันธุ์ไทย ข้อมูลเพิ่ม ที่เหล่าทาสไม่ควรพลาด !!

    ReplyDelete
  10. Gutt Websäit : Zonahobisaya
    Gutt Websäit : Zonahobisaya
    Gutt Websäit : Biodata
    Gutt Websäit : Sinopsis Film Terbaru
    Gutt Websäit : Resep
    Gutt Websäit : Profil
    Gutt Websäit : Zonahobisaya
    Gutt Websäit : Zonahobisaya

    ReplyDelete
  11. รวมเรื่องราวของสัตว์เลี้ยงเเสนน่ารัก ศึกษาพฤติกรรมสัตว์เลี้ยงของคุณได้ง่ายๆ ไปกับ evanasa https://evanasa.com/ ไม่วา่จะเป็นน้องหมา น้องเเมวเราก็รวบรวมไว้ที่นี่เเล้ว สัตว์เเปลกจากทั่วทุกมุมโลก ต่างก็รวมไว้ที่นี่ เพิ่มความรู้ให้กับทาสเกี่ยวกับสัตว์เลี้ยง ไปกับเว็บไซต์ของเราได้เลย.

    ReplyDelete