{"id":7511,"date":"2016-01-20T10:00:00","date_gmt":"2016-01-20T18:00:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2016\/01\/20\/visual-studio-2015-update-1-new-experimental-feature-mpx\/"},"modified":"2021-10-05T12:53:30","modified_gmt":"2021-10-05T12:53:30","slug":"visual-studio-2015-update-1-new-experimental-feature-mpx","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/visual-studio-2015-update-1-new-experimental-feature-mpx\/","title":{"rendered":"Visual Studio 2015 Update 1: New Experimental Feature &#8211; MPX"},"content":{"rendered":"<h3>Introduction<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">This post is about Intel&reg; Memory Protection Extensions (Intel&reg; MPX) support in Microsoft Visual Studio* 2015; content provided by&nbsp;Gautham Beeraka, George Kuan, and Juan Rodriguez from Intel Corporation.<\/span><\/p>\n<p>&nbsp;&nbsp;<\/p>\n<h3>Overview<\/h3>\n<p style=\"text-align: left\"><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Update 1 for&nbsp;Visual Studio 2015&nbsp;was announced on November 30, 2015. This update includes experimental compiler and debugger support for Intel MPX.&nbsp; Intel MPX&nbsp;can check all pointer reads and writes to ensure they remain within their declared memory bounds.&nbsp; This technology can detect&nbsp;buffer overflows and stop program execution at runtime, averting possible system compromises. It enables C\/C++ code to&nbsp;make use of&nbsp;the new MPX instruction set and registers introduced in the 6<sup>th<\/sup> Generation Intel&reg; Core&trade; Processors (&ldquo;MPX-enabled platform&rdquo;).<\/span><\/p>\n<p style=\"text-align: left\"><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">The Microsoft Visual C++ Compiler* and linker can now generate checks automatically, a capability enabled by specifying a command line option.<\/span><\/p>\n<p style=\"text-align: left\"><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">This blog explains how you can use automatic MPX code generation and debug MPX-enabled binaries.&nbsp; For more details on Intel MPX, please see the&nbsp;<span style=\"color: #0000ff\"><a title=\"Intel&reg; MPX Technology web page\" href=\"https:\/\/software.intel.com\/en-us\/isa-extensions\/intel-mpx\"><span style=\"color: #0000ff\">Intel MPX Technology web page<\/span><\/a><\/span>.<\/span><\/p>\n<p style=\"text-align: left\">&nbsp;<\/p>\n<h3 style=\"text-align: left\">How to enable automatic MPX code generation<\/h3>\n<p style=\"text-align: left\"><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">&nbsp;Visual Studio 2015 Update 1 introduces a new compiler option:<span style=\"color: #0000ff\"> \/d2MPX<\/span>.<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\"><span style=\"color: #0000ff\">\/d2MPX<\/span> currently supports:<\/span><\/p>\n<ul>\n<li><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Checking memory writes for potential buffer overflows. &nbsp;This provides protection for local and global pointers and arrays.<\/span><\/li>\n<li><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Extensions to the calling conventions to automatically propagate bounds associated with pointer arguments.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">To enable automatic MPX code generation for your project:<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">In Visual Studio, add the <span style=\"color: #0000ff\">\/d2MPX<\/span> option in the Additional Options box (<span style=\"color: #0000ff\">Project|Properties|Configuration Properties|C\/C++|Command Line|Additional Options<\/span>), Figure 1.<\/span><\/p>\n<p>&nbsp;<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/1325.Figure1.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/1325.Figure1.png\" alt=\"Image 1325 Figure1\" width=\"852\" height=\"604\" class=\"alignnone size-full wp-image-29185\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/1325.Figure1.png 852w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/1325.Figure1-300x213.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/1325.Figure1-768x544.png 768w\" sizes=\"(max-width: 852px) 100vw, 852px\" \/><\/a><span style=\"line-height: 107%;font-family: 'Calibri',sans-serif;font-size: 11pt\"><br \/>&nbsp;<br \/><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 1.&nbsp;Add the <span style=\"color: #0000ff\">\/d2MPX<\/span> compiler option for each desired configuration.<\/span><br \/>&nbsp;&nbsp;&nbsp;<br \/><\/span><\/p>\n<h3><span style=\"line-height: 107%;font-family: 'Calibri',sans-serif;font-size: 11pt\">Usage Example<\/span><\/h3>\n<p><span style=\"line-height: 107%;font-family: arial,helvetica,sans-serif;font-size: small\">The following example is a program that contains an illustrative buffer overflow<\/span><\/p>\n<p>&nbsp;<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/3835.MPX_.jpg\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/3835.MPX_.jpg\" alt=\"Image 3835 MPX\" width=\"649\" height=\"449\" class=\"alignnone size-full wp-image-29186\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/3835.MPX_.jpg 649w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/3835.MPX_-300x208.jpg 300w\" sizes=\"(max-width: 649px) 100vw, 649px\" \/><\/a><br \/>&nbsp;<span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 2.&nbsp;Code with buffer overflow that will be detected with&nbsp;<span style=\"color: #0000ff\">\/d2MPX.<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">In Figure 2, the statement inside of the for loop would have overflowed the <em>out<\/em> array when it attempts to write past the end of the array since <em>out<\/em> is smaller than string <em>str<\/em>. Just before the program would have performed the out-of-bounds store, the MPX hardware will generate a #BR (bound range exceeded) exception, which is manifested as a structured exception handling (SEH) exception &ldquo;Array bounds exceeded&rdquo;. The default behavior in absence of an exception handler for the array bounds exceeded exception is immediate termination of the program. Alternatively, one can add an exception handler as shown in the example code to log the exception or to perform some context dependent recovery such as tearing down the process all the while having avoided the out-of-bounds store.<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Steps to build and run the example:<\/span><\/p>\n<ol>\n<li>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Check that the Intel&reg; MPX Runtime Driver is installed on your Microsoft&reg; Windows&reg; 10 November 2015 Update or greater system by verifying its presence in Device Manager under System devices (Figure 3).&nbsp; If it is absent, please download and install the driver from the <span style=\"color: #0000ff\"><a href=\"https:\/\/software.intel.com\/en-us\/articles\/intel-memory-protection-extensions-enabling-guide\"><span style=\"color: #0000ff\">Intel&reg; Memory Protection Extensions Enabling Guide<\/span><\/a><\/span>.<\/span><\/p>\n<\/li>\n<li>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Install Visual Studio 2015 Update 1. Note, if Visual Studio is installed with the phone emulators, Hyper-V will have to be disabled (<span style=\"color: #0000ff\">bcdedit \/set hypervisorlaunchtype off<\/span> and reboot) because this version of Windows does not expose MPX instructions to the guest.<\/span><\/p>\n<\/li>\n<li>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Create a Win32 Console Application named &ldquo;MPXExample&rdquo; and use the code in Figure 2 for the driver code.<\/span><\/p>\n<\/li>\n<li>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">As noted above, please, double check that the <span style=\"color: #0000ff\">\/d2MPX<\/span> option is enabled for the current Configuration.<\/span><\/p>\n<\/li>\n<li>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Build the project for the X64 platform from within Visual Studio. This should produce an MPXExample.exe binary.<\/span><\/p>\n<\/li>\n<li>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Execute the binary MPXExample.exe on an MPX-enabled platform with Windows 10 &ndash; which has the OS support for MPX.<\/span><\/p>\n<\/li>\n<li><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">To have the Visual Studio Debugger break on the array bounds exceeded exception, please enable the option for &ldquo;Array bounds exceeded&rdquo; in Exception Settings (<span style=\"color: #0000ff\">Debug|Windows|ExceptionSettings<\/span>) as shown in Figure 4. Executing MPXExample.exe in the debugger should now break on the exception (Figure 5). In this example, the #BR exception is thrown when MPX detects that we are about to write beyond the upper bound of the out array (Figure 6).<\/span><\/li>\n<\/ol>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4213.Figure3.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4213.Figure3.png\" alt=\"Image 4213 Figure3\" width=\"793\" height=\"383\" class=\"alignnone size-full wp-image-29187\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4213.Figure3.png 793w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4213.Figure3-300x145.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4213.Figure3-768x371.png 768w\" sizes=\"(max-width: 793px) 100vw, 793px\" \/><\/a>&nbsp;<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 3. Verify that the Intel MPX Runtime Driver is installed via Device Manager.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/5040.Figure4.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/5040.Figure4.png\" alt=\"Image 5040 Figure4\" width=\"528\" height=\"200\" class=\"alignnone size-full wp-image-29191\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/5040.Figure4.png 528w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/5040.Figure4-300x114.png 300w\" sizes=\"(max-width: 528px) 100vw, 528px\" \/><\/a><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 4. Enable break on the array bounds exceeded exception in the Exception Settings window to have the Visual Studio Debugger break on the exception.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4405.Figure5.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4405.Figure5.png\" alt=\"Image 4405 Figure5\" width=\"546\" height=\"312\" class=\"alignnone size-full wp-image-29189\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4405.Figure5.png 546w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4405.Figure5-300x171.png 300w\" sizes=\"(max-width: 546px) 100vw, 546px\" \/><\/a><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 5.&nbsp;The Visual Studio Debugger breaks on the array bounds exceeded exception.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8015.Figure6.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8015.Figure6.png\" alt=\"Image 8015 Figure6\" width=\"613\" height=\"486\" class=\"alignnone size-full wp-image-29194\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8015.Figure6.png 613w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8015.Figure6-300x238.png 300w\" sizes=\"(max-width: 613px) 100vw, 613px\" \/><\/a><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 6.&nbsp;The exception is thrown when checking the upper bound as shown in this snapshot of the Disassembly window.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Visual Studio 2015 Update 1 supports the display and manipulation of the MPX registers via both the Register (Figure 7) and Watch windows (Figure 8) when running on an MPX-enabled platform.<\/span><\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4265.Figure7.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4265.Figure7.png\" alt=\"Image 4265 Figure7\" width=\"1135\" height=\"529\" class=\"alignnone size-full wp-image-29188\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4265.Figure7.png 1135w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4265.Figure7-300x140.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4265.Figure7-1024x477.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4265.Figure7-768x358.png 768w\" sizes=\"(max-width: 1135px) 100vw, 1135px\" \/><\/a><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 7.&nbsp;To observe the contexts of the MPX bounds registers, enable MPX in the Debugger Register window.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6811.Figure8.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6811.Figure8.png\" alt=\"Image 6811 Figure8\" width=\"566\" height=\"169\" class=\"alignnone size-full wp-image-29193\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6811.Figure8.png 566w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6811.Figure8-300x90.png 300w\" sizes=\"(max-width: 566px) 100vw, 566px\" \/><\/a><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 8. Adding a bounds register to the Debugger Watch window is also simple. BND0.UB and BND0.LB in the Watch window refer to the upper and lower bounds in the BND0<\/span><br \/><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">register respectively. Note that the upper bound of a bounds register is displayed in 2&rsquo;s complement form.<\/span><\/p>\n<p>&nbsp;&nbsp;<\/p>\n<h3>How to tell if a binary is MPX-enabled<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Run <span style=\"color: #000000\"><em>dumpbin \/headers MPXExample.exe.<\/em><\/span>&nbsp; The MPX debug directory entry should be similar to what is shown in Figure 9.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4774.Figure9.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4774.Figure9.png\" alt=\"Image 4774 Figure9\" width=\"627\" height=\"445\" class=\"alignnone size-full wp-image-29190\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4774.Figure9.png 627w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/4774.Figure9-300x213.png 300w\" sizes=\"(max-width: 627px) 100vw, 627px\" \/><\/a><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Figure 9. To tell if a binary is MPX-enabled, check whether a binary includes the&nbsp;<em>mpx<\/em> debug directory using <span style=\"color: #000000\"><em>dumpbin<\/em><\/span>. The&nbsp;<em>mpx<\/em> debug directory should be listed in the Debug Directories section in the <em><span style=\"color: #000000\">dumpbin<\/span><\/em> output.<\/span><\/p>\n<p>&nbsp;&nbsp;<\/p>\n<h3>Must I compile everything with MPX?<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">You don&rsquo;t have to compile all of your code with MPX enabled.&nbsp;&nbsp;A mixture of MPX and non-MPX enabled code will execute correctly. &nbsp;However, code compiled without MPX support will not have any MPX checks.<\/span><\/p>\n<p>&nbsp;&nbsp;<\/p>\n<h3>What hardware and version of Windows do&nbsp;I need?&nbsp;<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">To gain the benefits of MPX, MPX-enabled code should be executed on an MPX-enabled platform running a version of the Windows Operating System that is MPX aware. &nbsp;As of today, MPX is supported on the following:<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6116.Table_.jpg\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6116.Table_.jpg\" alt=\"Image 6116 Table\" width=\"599\" height=\"78\" class=\"alignnone size-full wp-image-29192\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6116.Table_.jpg 599w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/6116.Table_-300x39.jpg 300w\" sizes=\"(max-width: 599px) 100vw, 599px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>What if I execute MPX-enabled code on a platform or on a version of Windows<br \/>that does not support MPX?<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">The MPX-enabled code will execute correctly, but it will not benefit from MPX. &nbsp;You need to execute the code on an MPX-enabled platform with an MPX-aware operating system.&nbsp; The MPX instructions will be treated as NOPs, so you might experience a performance decrease in these scenarios.<\/span><\/p>\n<p>&nbsp;&nbsp;<\/p>\n<h3>Performance Impact<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">MPX technology provides a powerful safeguard against buffer overflow. Inserting checks for every write to memory may incur some execution time and memory footprint overhead.&nbsp; The amount of overhead is tolerable during testing.&nbsp; However, when enabled for production code, the developer must balance whether the improved memory safety outweighs their customers&rsquo; performance needs.&nbsp; We plan to improve performance based on feedback.<\/span><\/p>\n<p>&nbsp;&nbsp;<\/p>\n<h3>Known Issues<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">There is a known issue with x86 debug build where debug instrumentation interferes MPX operation.<\/span><\/p>\n<p>&nbsp;&nbsp;<\/p>\n<h3>More Information and Feedback<\/h3>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">For more information on how Intel MPX works, details on MPX intrinsic functions, calling convention extensions, and runtime behavior of MPX, please refer to the <span style=\"color: #0000ff\"><a href=\"https:\/\/software.intel.com\/en-us\/articles\/intel-memory-protection-extensions-enabling-guide\"><span style=\"color: #0000ff\">Intel&reg; Memory Protection Extensions Enabling Guide<\/span><\/a><\/span>.<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Please try out automatic MPX code generation in Visual Studio 2015 Update 1. We are eager to hear about your experiences, especially in terms of usability, code size and runtime performance impact, and your suggestions for how to improve this feature. Please leave feedback in the comment box below or at the <span style=\"color: #0000ff\"><a href=\"https:\/\/software.intel.com\/en-us\/forums\/intel-isa-extensions\"><span style=\"color: #0000ff\">Intel ISA Extensions Forum on Intel&reg; Developer Zone<\/span><\/a><\/span>.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">Intel <\/span><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">technologies&rsquo; features and benefits depend on system configuration and may <\/span><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">require enabled hardware, software or service activation. Performance varies <\/span><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">depending on system configuration. &nbsp;Check with your system manufacturer or <\/span><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">retailer or learn more at <a title=\"Intel&reg; MPX Technology web page\" href=\"https:\/\/na01.safelinks.protection.outlook.com\/?url=https%3a%2f%2fsoftware.intel.com%2fen-us%2fisa-extensions%2fintel-mpx&amp;data=01%7c01%7cJim.Hogg%40microsoft.com%7c1cf9a2ab8bf04601b40d08d320fed241%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=nXSa%2f5tsv0FiCioS07S96vpVmfOjGYVE2%2f%2fDhGbj37U%3d\">Intel MPX Technology web page<\/a>. Intel, the Intel logo, 6th Generation Intel&reg; Core are <\/span><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">trademarks of Intel Corporation in the U.S. and\/or other countries. <\/span><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">*Other names and brands may be claimed as the property of <\/span><span style=\"font-family: arial,helvetica,sans-serif;font-size: small\">others.&nbsp;&copy; 2016 Intel Corporation<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction This post is about Intel&reg; Memory Protection Extensions (Intel&reg; MPX) support in Microsoft Visual Studio* 2015; content provided by&nbsp;Gautham Beeraka, George Kuan, and Juan Rodriguez from Intel Corporation. &nbsp;&nbsp; Overview Update 1 for&nbsp;Visual Studio 2015&nbsp;was announced on November 30, 2015. This update includes experimental compiler and debugger support for Intel MPX.&nbsp; Intel MPX&nbsp;can check [&hellip;]<\/p>\n","protected":false},"author":6384,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[256,230],"tags":[140,65,36],"class_list":["post-7511","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-experimental","category-new-feature","tag-c","tag-compiler","tag-vc"],"acf":[],"blog_post_summary":"<p>Introduction This post is about Intel&reg; Memory Protection Extensions (Intel&reg; MPX) support in Microsoft Visual Studio* 2015; content provided by&nbsp;Gautham Beeraka, George Kuan, and Juan Rodriguez from Intel Corporation. &nbsp;&nbsp; Overview Update 1 for&nbsp;Visual Studio 2015&nbsp;was announced on November 30, 2015. This update includes experimental compiler and debugger support for Intel MPX.&nbsp; Intel MPX&nbsp;can check [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/7511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/6384"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=7511"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/7511\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=7511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=7511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=7511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}